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