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