ความสามารถเชิงพื้นที่อาจแตกต่างกันไปในแต่ละอุปกรณ์และเปลี่ยนแปลงไปเมื่อผู้ใช้โต้ตอบกับแอปหรือระบบ แอปเองก็อาจเปลี่ยนแปลงความสามารถเชิงพื้นที่ได้เช่นกัน เช่น การย้ายไปยัง Home Space หรือ Full Space แอปต้องตรวจสอบความสามารถเชิงพื้นที่เพื่อกำหนดว่า API ใดบ้างที่รองรับในสภาพแวดล้อมปัจจุบัน เพื่อหลีกเลี่ยงปัญหา
ตรวจสอบความสามารถเชิงพื้นที่โดยใช้ Jetpack Compose for XR
Jetpack Compose for XR จะสร้าง Composition Local สำหรับตรวจสอบความสามารถเชิงพื้นที่ ใช้ 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: กิจกรรมสามารถทำให้ตัวเองเป็นเชิงพื้นที่ได้ (เช่น การเพิ่มแผงเชิงพื้นที่)
นอกจากนี้ คุณยังเลือกสมัครใช้การเรียกกลับ
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 มิติลงในแอป