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

ความสามารถของพื้นที่ทำงานอาจเปลี่ยนแปลงเมื่อผู้ใช้โต้ตอบกับแอปหรือระบบ หรือแอปของคุณเองก็อาจเปลี่ยนแปลงความสามารถดังกล่าวได้ เช่น การเปลี่ยนเป็นโหมดพื้นที่ทำงานในบ้านหรือโหมดพื้นที่ทำงานแบบเต็ม แอปของคุณต้องตรวจสอบความสามารถเชิงพื้นที่เพื่อดูว่าระบบรองรับ 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 คุณจะต้องสร้างเซสชัน เมื่อสร้างเซสชันแล้ว ให้เรียกใช้ getSpatialCapabilities ในเซสชันเพื่อสอบถามความสามารถเชิงพื้นที่ที่พร้อมใช้งานในปัจจุบัน

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

val xrSession = Session.create(this)

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

// Example 3: Create a spatialized panel if/when spatialization UI becomes available
xrSession.addSpatialCapabilitiesChangedListener((capabilities) -> {
  if (capabilities.hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_UI)){
Subspace{
   SpatialPanel(...)
      }
   }
});

ดูเพิ่มเติม