ความสามารถเชิงพื้นที่อาจแตกต่างกันไปในแต่ละอุปกรณ์ และเปลี่ยนแปลงเมื่อผู้ใช้โต้ตอบกับแอปหรือระบบ แอปของคุณเองก็สามารถเปลี่ยนสถานะเหล่านี้ได้ เช่น การย้ายไปยัง Home Space หรือ Full Space เพื่อหลีกเลี่ยงปัญหา แอปของคุณต้องตรวจสอบความสามารถเชิงพื้นที่เพื่อดูว่า 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 จาก scene ของเซสชันเพื่อค้นหาความสามารถเชิงพื้นที่ที่พร้อมใช้งานในปัจจุบัน
SPATIAL_3D_CONTENT: กิจกรรมสามารถสร้างเนื้อหา 3 มิติได้APP_ENVIRONMENT: กิจกรรมสามารถกำหนดสภาพแวดล้อมของตัวเองได้EMBED_ACTIVITY: กิจกรรมสามารถฝังกิจกรรมอื่นในเชิงพื้นที่ได้PASSTHROUGH_CONTROL: กิจกรรมสามารถเปิดหรือปิดใช้การส่งผ่านได้SPATIAL_AUDIO: กิจกรรมสามารถใช้เสียงรอบทิศทางได้SPATIAL_UI: กิจกรรมสามารถปรับเปลี่ยนเชิงพื้นที่ได้เอง (เช่น การเพิ่มแผงเชิงพื้นที่)
นอกจากนี้ คุณยังเลือกสมัครรับ Callback addSpatialCapabilitiesChangedListener ที่จะแจ้งให้คุณทราบเมื่อความสามารถเชิงพื้นที่เปลี่ยนแปลงไปได้ด้วย
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
ใช้โหมดผสมเพื่อตรวจสอบความสามารถในการแสดงผลของอุปกรณ์
ใน Android XR ชุดหูฟัง XR และแว่นตา XR แบบใช้สายมีความสามารถด้านฮาร์ดแวร์ที่แตกต่างกัน โดยเฉพาะอย่างยิ่งในเรื่องประเภทจอแสดงผล คุณอาจต้องปรับสีของ UI ของแอปและออบเจ็กต์ที่แสดงผลเพื่อเพิ่มระดับการมองเห็นให้สูงสุด ซึ่งอาจได้รับอิทธิพลจากประเภทการแสดงผลและโหมดการผสมที่ต้องการซึ่งอุปกรณ์ใช้ API DisplayBlendMode จะให้ความสามารถของโหมดผสมของอุปกรณ์สำหรับการแสดงผล ใช้ API นี้เพื่อกำหนดวิธีเพิ่มเนื้อหาเสมือนจริงลงในโลกจริง
ประเภทโหมดผสมที่ควรทราบมีดังนี้
ADDITIVE: ระบบจะเพิ่มเนื้อหาเสมือนจริงลงในโลกจริงโดยการเพิ่มค่าพิกเซลสำหรับองค์ประกอบสีแดง เขียว และน้ำเงินแต่ละรายการ ระบบจะไม่สนใจอัลฟ่า และพิกเซลสีดำจะปรากฏเป็นแบบโปร่งใสALPHA_BLEND: ระบบจะเพิ่มเนื้อหาเสมือนจริงลงในโลกจริงโดยการผสมผสานค่าพิกเซลแบบอัลฟ่าตามคอมโพเนนต์อัลฟ่าNO_DISPLAY: อุปกรณ์ไม่รองรับการผสมสี
ใช้ XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() จากไลบรารี Jetpack XR Runtime เพื่อตรวจสอบประเภทโหมดการผสมที่ใช้อยู่และทำการปรับเปลี่ยนตามต้องการ
ดูเพิ่มเติม
- สร้างเซสชัน
- การเปลี่ยนระหว่าง HSM และ FSM
- เพิ่มสภาพแวดล้อมเชิงพื้นที่ลงในแอป
- เพิ่มโมเดล 3 มิติลงในแอป