ตรวจสอบความพร้อมใช้งานของอุปกรณ์ในขณะรันไทม์สำหรับแว่นตาเสียงและแว่นตาแสดงผล

อุปกรณ์ XR ที่รองรับ
คำแนะนำนี้จะช่วยคุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทต่างๆ
แว่นตาอัจฉริยะสำหรับเสียงและ
แว่นตาอัจฉริยะสำหรับแสดงผล

เมื่อผู้ใช้ทำกิจกรรมต่างๆ ในแต่ละวัน แว่นตาอัจฉริยะสำหรับเสียงหรือแว่นตาอัจฉริยะสำหรับแสดงผลอาจ ขาดการเชื่อมต่อกับอุปกรณ์โฮสต์ (เช่น โทรศัพท์ของผู้ใช้) หรือแว่นตาอาจใช้งานไม่ได้ชั่วคราวหากผู้ใช้ถอดแว่นตาออก เพื่อ พิจารณาการเปลี่ยนแปลงความพร้อมใช้งานของอุปกรณ์ประเภทต่างๆ แอปของคุณสามารถใช้ XR Device Availability API ซึ่งรวมสัญญาณความพร้อมใช้งานของอุปกรณ์เป็น ค่า Lifecycle.State มาตรฐานของ Android ใช้ API นี้เพื่อช่วยจัดการการกำหนดเส้นทางเสียง การเปิดใช้งานคำสั่งเสียง และเพื่อทราบว่าควรคาดหวังการป้อนข้อมูลจากผู้ใช้เมื่อใดตามความพร้อมใช้งานของแว่นตา

ทำความเข้าใจสถานะวงจรการทำงาน

ตารางต่อไปนี้แสดงวิธีที่สัญญาณความพร้อมใช้งานของอุปกรณ์แมปกับค่า Lifecycle.State

สถานะวงจรการทำงาน

สถานะอุปกรณ์

คำอธิบาย

INITIALIZED

สร้างแล้ว

สร้างออบเจ็กต์วงจรการทำงานแล้ว แต่ยังไม่ได้สังเกต

CREATED

ไม่ได้ใช้งาน

บริการเชื่อมต่ออยู่ แต่ผู้ใช้ไม่ได้สวมอุปกรณ์

STARTED

ใช้งานอยู่

ผู้ใช้สวมอุปกรณ์อยู่

DESTROYED

ยกเลิกการเชื่อมต่อแล้ว

อุปกรณ์ยกเลิกการเชื่อมต่อหรือการเชื่อมต่อบริการขาดหายไป

ตรวจสอบและติดตามความพร้อมใช้งานของอุปกรณ์

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

    // In your phone activity or service, check for projected device connection state before
    // attempting to create a projected device context and get the device lifecycle.
    ProjectedContext.isProjectedDeviceConnected(context, currentCoroutineContext())
        .flatMapLatest { isConnected ->
            if (isConnected) {
                try {
                    // Create the projected device context on connection
                    val projectedContext = ProjectedContext.createProjectedDeviceContext(context)
                    val xrDevice = XrDevice.getCurrentDevice(projectedContext)

                    // Get the device lifecycle
                    xrDevice.getLifecycle().currentStateFlow
                } catch (e: IllegalStateException) {
                    flowOf(Lifecycle.State.DESTROYED)
                }
            } else {
                flowOf(Lifecycle.State.DESTROYED)
            }
        }
        .collect { state ->
            when (state) {
                Lifecycle.State.STARTED -> { /* Device is available (worn) */ }
                Lifecycle.State.CREATED -> { /* Device is unavailable (not worn) */ }
                Lifecycle.State.DESTROYED -> { /* Device is disconnected from host phone */ }
                else -> { /* Handle other states */ }
            }
        }
}

ประเด็นสำคัญเกี่ยวกับโค้ด

  • ตรวจสอบการเชื่อมต่อ: ก่อนเข้าถึงวงจรการทำงานของอุปกรณ์ ให้เรียก ProjectedContext.isProjectedDeviceConnected เพื่อยืนยันว่าอุปกรณ์ที่คาดการณ์ไว้เชื่อมต่อกับอุปกรณ์โฮสต์
  • รับ ProjectedContext: เรียก ProjectedContext.createProjectedDeviceContext หลังจากยืนยัน การเชื่อมต่อแล้วเท่านั้น และตรวจสอบว่าได้ส่งบริบทนี้ไปยังอินสแตนซ์ XrDevice
  • จัดการการทำให้บริบทไม่ถูกต้อง: ระบบจะสร้าง deviceId ใหม่ทุกครั้งที่ อุปกรณ์ที่คาดการณ์ไว้เชื่อมต่อ เมื่อสถานะไปถึง DESTROYED แล้ว ProjectedContext ปัจจุบันจะใช้ไม่ได้ หยุดใช้ทันทีและรอการเชื่อมต่อใหม่
  • เพิ่มประสิทธิภาพแบตเตอรี่และทรัพยากร: จัดการฟังก์ชันการทำงานของแอปอย่างเหมาะสม ตามสถานะวงจรการทำงานเพื่อรักษาทรัพยากรของระบบและลดการใช้แบตเตอรี่ ตัวอย่างเช่น คุณควรปล่อยทรัพยากรเฉพาะของแว่นตา เช่น สตรีมข้อมูลกล้อง เมื่อสถานะเปลี่ยนจาก STARTED กลับไปเป็น CREATED สถานะ CREATED บ่งบอกว่าผู้ใช้ไม่ได้สวมอุปกรณ์แล้ว ดังนั้นการหยุดกระบวนการเหล่านี้จึงมีความสำคัญอย่างยิ่งในการป้องกันไม่ให้แบตเตอรี่หมดเร็วโดยไม่จำเป็นและเพื่อส่งเสริมความเป็นส่วนตัวของผู้ใช้