ความสามารถของพื้นที่ทำงานอาจเปลี่ยนแปลงเมื่อผู้ใช้โต้ตอบกับแอปหรือระบบ หรือแอปของคุณเองก็อาจเปลี่ยนแปลงความสามารถดังกล่าวได้ เช่น การเปลี่ยนเป็นโหมดพื้นที่ทำงานในบ้านหรือโหมดพื้นที่ทำงานแบบเต็ม แอปของคุณต้องตรวจสอบความสามารถเชิงพื้นที่เพื่อดูว่าระบบรองรับ 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
ในเซสชันเพื่อสอบถามความสามารถเชิงพื้นที่ที่พร้อมใช้งานในปัจจุบัน
SPATIAL_CAPABILITY_3D_CONTENT
: กิจกรรมสามารถสร้างเนื้อหา 3 มิติได้SPATIAL_CAPABILITY_APP_ENVIRONMENT
: กิจกรรมสามารถตั้งค่าสภาพแวดล้อมของตนเองได้SPATIAL_CAPABILITY_EMBED_ACTIVITY
: กิจกรรมสามารถฝังกิจกรรมอื่นในเชิงพื้นที่ได้SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: กิจกรรมสามารถเปิดหรือปิดใช้การส่งต่อได้SPATIAL_CAPABILITY_SPATIAL_AUDIO
: กิจกรรมใช้เสียงรอบทิศทางได้SPATIAL_CAPABILITY_UI
: กิจกรรมสามารถจัดวางตามพื้นที่ได้ เช่น การเพิ่มแผงพื้นที่
นอกจากนี้ คุณยังเลือกสมัครรับการติดต่อกลับ 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(...)
}
}
});
ดูเพิ่มเติม
- สร้างเซสชัน
- การเปลี่ยนระหว่าง HSM กับ FSM
- เพิ่มสภาพแวดล้อมเชิงพื้นที่ลงในแอป
- เพิ่มโมเดล 3 มิติลงในแอป