أثناء تنقّل المستخدم، قد تنقطع النظارات الصوتية أو نظارات بشاشة عرض عن الجهاز المضيف (مثل هاتف المستخدم)، أو قد تصبح النظارات غير متاحة مؤقتًا إذا خلعها المستخدم. ولمراعاة هذه الأنواع من التغييرات في مدى توفّر الجهاز، يمكن لتطبيقك استخدام واجهة برمجة التطبيقات XR Device Availability API التي تجمع إشارات مدى توفّر الجهاز في قيم Lifecycle.State العادية لنظام Android. يمكنك استخدام واجهة برمجة التطبيقات هذه للمساعدة في إدارة توجيه الصوت وتفعيل الكلمة المحفّزة ومعرفة الوقت المتوقّع لتلقّي إدخال من المستخدم استنادًا إلى وقت توفّر النظارات.
فهم حالات دورة الحياة
يوضّح الجدول التالي كيفية ربط إشارات توفّر الجهاز بقيم 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إلى أنّ الجهاز لم يعُد موضوعًا على المعصم، لذا من الضروري إيقاف هذه العمليات لمنع استنزاف البطارية بلا داعٍ وتعزيز خصوصية المستخدم.