ऑडियो ग्लास और डिसप्ले ग्लास के लिए, डिवाइस की उपलब्धता की जानकारी रनटाइम पर देखना

एक्सआर डिवाइसों पर लागू होने वाली सुविधाएं
इस गाइड की मदद से, इन तरह के एक्सआर डिवाइसों के लिए अनुभव बनाए जा सकते हैं.
ऑडियो और
डिसप्ले ग्लास

कोई व्यक्ति दिन भर में कई काम करता है. इस दौरान, ऐसा हो सकता है कि उसके ऑडियो ग्लास या डिसप्ले ग्लास, होस्ट डिवाइस (जैसे कि फ़ोन) से कनेक्ट न रहें. इसके अलावा, अगर वह व्यक्ति अपने ग्लास उतार देता है, तो हो सकता है कि वे कुछ समय के लिए उपलब्ध न हों. डिवाइस की उपलब्धता में होने वाले इस तरह के बदलावों को ध्यान में रखने के लिए, आपका ऐप्लिकेशन XR Device Availability API का इस्तेमाल कर सकता है. यह एपीआई, डिवाइस की उपलब्धता के सिग्नल को Android Lifecycle.State की स्टैंडर्ड वैल्यू में बदल देता है. इस एपीआई का इस्तेमाल, ऑडियो राउटिंग और हॉटवर्ड चालू करने की सुविधा को मैनेज करने के लिए करें. साथ ही, यह जानने के लिए करें कि चश्मे के उपलब्ध होने के आधार पर, उपयोगकर्ता से कब इनपुट मिलने की उम्मीद की जा सकती है.

लाइफ़साइकल की स्थितियों के बारे में जानकारी

यहां दी गई टेबल में बताया गया है कि डिवाइस की उपलब्धता के सिग्नल, Lifecycle.State वैल्यू के साथ कैसे मैप होते हैं.

लाइफ़साइकल की स्थिति

डिवाइस की स्थिति

ब्यौरा

INITIALIZED

बनाया गया

लाइफ़साइकल ऑब्जेक्ट बना दिया गया है, लेकिन अभी तक इसे देखा नहीं गया है.

CREATED

बंद है

सेवा कनेक्ट है, लेकिन उपयोगकर्ता ने डिवाइस नहीं पहना है.

STARTED

चालू है

उपयोगकर्ता ने डिवाइस पहना हुआ हो.

DESTROYED

डिसकनेक्ट किया गया

डिवाइस डिसकनेक्ट हो गया है या सेवा का कनेक्शन टूट गया है.

RESUMED

लागू नहीं

फ़िलहाल, डिवाइस के लाइफ़साइकल में इस स्थिति का इस्तेमाल नहीं किया जाता है और न ही इसे दिखाया जाता है.

डिवाइस की उपलब्धता की जांच करना और उसे मॉनिटर करना

किसी डिवाइस की उपलब्धता की जांच करने और उसे मॉनिटर करने के लिए, आपको प्रोजेक्ट किए गए कॉन्टेक्स्ट का इस्तेमाल करना होगा. साथ ही, लाइफ़साइकल की स्थिति का इस्तेमाल करके यह तय करना होगा कि आपका ऐप्लिकेशन हर मामले को कैसे हैंडल करे:

    // 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 स्थिति से पता चलता है कि डिवाइस को अब नहीं पहना जा रहा है. इसलिए, इन प्रोसेस को रोकना ज़रूरी है, ताकि बैटरी बेवजह खर्च न हो और उपयोगकर्ता की निजता को बढ़ावा मिले.