ตรวจสอบความสามารถเชิงพื้นที่

ความสามารถของพื้นที่ทำงานอาจเปลี่ยนแปลงไปเมื่อผู้ใช้โต้ตอบกับแอปหรือระบบ หรือแอปของคุณเองก็อาจเปลี่ยนแปลงความสามารถดังกล่าวได้ เช่น การเปลี่ยนเป็นโหมดพื้นที่ทำงานในบ้านหรือโหมดพื้นที่ทำงานแบบเต็ม แอปต้องตรวจสอบความสามารถเชิงพื้นที่เพื่อดูว่าระบบรองรับ API ใดบ้างในสภาพแวดล้อมปัจจุบัน เพื่อหลีกเลี่ยงปัญหา

ตรวจสอบความสามารถเชิงพื้นที่โดยใช้ Jetpack Compose สำหรับ XR

Jetpack Compose สำหรับ XR จะสร้าง Composition Local เพื่อตรวจสอบความสามารถเชิงพื้นที่ ใช้ตัวเลือกนี้เพื่อตรวจสอบว่าเปิดใช้ UI เชิงพื้นที่ เสียงรอบทิศทาง สภาพแวดล้อม การส่งผ่าน หรือเนื้อหา 3 มิติหรือไม่

คุณสามารถใช้ LocalSpatialCapabilities.current เพื่อตรวจสอบว่าความสามารถเชิงพื้นที่ต่อไปนี้พร้อมใช้งานหรือไม่

  • isSpatialUiEnabled: ระบุว่าแอปพลิเคชันอาจสร้างองค์ประกอบ UI เชิงพื้นที่ได้หรือไม่ (เช่น SpatialPanel)
  • isContent3dEnabled: ระบุว่าแอปพลิเคชันสามารถสร้างวัตถุ 3 มิติได้หรือไม่
  • isAppEnvironmentEnabled: ระบุว่าแอปพลิเคชันสามารถตั้งค่าสภาพแวดล้อมได้หรือไม่
  • isPassthroughControlEnabled: ระบุว่าแอปพลิเคชันสามารถควบคุมสถานะการส่งต่อได้หรือไม่
  • isSpatialAudioEnabled: ระบุว่าแอปพลิเคชันสามารถใช้เสียงรอบทิศทางได้หรือไม่

ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบว่าเปิดใช้ UI แบบพื้นที่หรือไม่

if (LocalSpatialCapabilities.current.isSpatialUiEnabled) {
    Subspace {
        SpatialPanel(
            modifier = SubspaceModifier
                .width(1488.dp)
                .fillMaxHeight()
        ) {
            AppContent()
        }
    }
} else {
    AppContent()
}

ตรวจสอบความสามารถเชิงพื้นที่โดยใช้ SceneCore

เมื่อใช้คลัง SceneCore คุณจะต้องสร้างเซสชัน เมื่อสร้างเซสชันแล้ว ให้เรียกใช้ spatialCapabilities ในเซสชันเพื่อสอบถามความสามารถเชิงพื้นที่ที่พร้อมใช้งานในปัจจุบัน

นอกจากนี้ คุณยังเลือกสมัครรับการติดต่อกลับ addSpatialCapabilitiesChangedListener ที่จะแจ้งให้คุณทราบเมื่อความสามารถของฟีเจอร์ดังกล่าวมีการเปลี่ยนแปลงได้อีกด้วย

// Example 1: check if enabling passthrough mode is allowed
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
    )
) {
    xrSession.scene.spatialEnvironment.setPassthroughOpacityPreference(0f)
}
// Example 2: multiple capability flags can be checked simultaneously:
if (xrSession.scene.spatialCapabilities.hasCapability(
        SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL and
            SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT
    )
) {
    // ...
}

ดูเพิ่มเติม