التحقّق من توفّر أجهزة نظارات الصوت والنظارات الذكية في وقت التشغيل

أجهزة XR المشمولة
تساعدك هذه الإرشادات في إنشاء تجارب لهذه الأنواع من أجهزة XR.
نظارات الصوت والشاشة

أثناء استخدام نظّارة الصوت أو نظّارة الشاشة، قد ينقطع اتصالها بالجهاز المضيف (مثل هاتف المستخدم)، أو قد تصبح غير متاحة مؤقتًا إذا خلعها المستخدم. ولمراعاة هذه الأنواع من التغييرات في مدى توفّر الجهاز، يمكن لتطبيقك استخدام واجهة برمجة التطبيقات XR Device Availability API التي تجمع إشارات مدى توفّر الجهاز في قيم Lifecycle.State العادية لنظام Android. استخدِم واجهة برمجة التطبيقات هذه للمساعدة في إدارة توجيه الصوت وتفعيل الكلمة الرئيسية، ولمعرفة الوقت المتوقّع لتلقّي بيانات أدخلها المستخدم استنادًا إلى وقت توفّر النظارات.

فهم حالات مراحل النشاط

يوضّح الجدول التالي كيفية ربط إشارات مدى توفّر الجهاز بقيم 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 إلى أنّ الجهاز لم يعُد قيد الاستخدام، لذا فإنّ إيقاف هذه العمليات ضروري لمنع استنزاف البطارية بلا داعٍ وتعزيز خصوصية المستخدم.