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