وقتی کاربر درطول روز از دستگاههایش استفاده میکند، ممکن است اتصال عینکهای صوتی یا عینکهای نمایشگر به دستگاه میزبان (مثل تلفن کاربر) قطع شود یا اگر کاربر عینکهایش را بردارد، ممکن است عینکها بهطور موقت دردسترس نباشند. برای درنظر گرفتن این نوع تغییرات در دردسترس بودن دستگاه، برنامه شما میتواند از «میانای برنامهسازی کاربردی دردسترس بودن دستگاه XR» استفاده کند که نشانهای دردسترس بودن دستگاه را در مقادیر استاندارد Android Lifecycle.State ادغام میکند. از این API برای کمک به مدیریت
مسیریابی صدا، فعالسازی کلمه داغ، و برای دانستن زمان انتظار ورودی کاربر براساس
زمان دردسترس بودن عینک استفاده کنید.
آشنایی با وضعیتهای چرخه حیات
جدول زیر نشان میدهد نشانهای دردسترس بودن دستگاه چگونه به مقادیر 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نشان میدهد که دستگاه دیگر روی دست بسته نشده است، بنابراین متوقف کردن این فرایندها برای جلوگیری از خالی شدن غیرضروری شارژ و ارتقای حریم خصوصی کاربر ضروری است.