در زمان اجرا، دردسترس بودن دستگاه را برای عینک‌های صوتی و عینک‌های نمایشگر بررسی کنید

دستگاه‌های XR قابل‌اعمال
این راهنمایی به شما کمک می‌کند برای این نوع دستگاه‌های واقعیت گسترده تجربه بسازید.
عینک‌های صوتی و
نمایشگر

وقتی کاربر درطول روز از دستگاه‌هایش استفاده می‌کند، ممکن است اتصال عینک‌های صوتی یا عینک‌های نمایشگر به دستگاه میزبان (مثل تلفن کاربر) قطع شود یا اگر کاربر عینک‌هایش را بردارد، ممکن است عینک‌ها به‌طور موقت دردسترس نباشند. برای درنظر گرفتن این نوع تغییرات در دردسترس بودن دستگاه، برنامه شما می‌تواند از «میانای برنامه‌سازی کاربردی دردسترس بودن دستگاه XR» استفاده کند که نشان‌های دردسترس بودن دستگاه را در مقادیر استاندارد Android Lifecycle.State ادغام می‌کند. از این API برای کمک به مدیریت مسیریابی صدا، فعال‌سازی کلمه داغ، و برای دانستن زمان انتظار ورودی کاربر براساس زمان دردسترس بودن عینک استفاده کنید.

آشنایی با وضعیت‌های چرخه حیات

جدول زیر نشان می‌دهد نشان‌های دردسترس بودن دستگاه چگونه به مقادیر Lifecycle.State نگاشت می‌شوند.

وضعیت چرخه حیات

وضعیت دستگاه

شرح

INITIALIZED

ایجادشده

شیء چرخه حیات ایجاد شده است اما هنوز مشاهده نشده است.

CREATED

غیرفعال

سرویس متصل است، اما کاربر دستگاه را نپوشیده است.

STARTED

فعال

کاربر دستگاه را پوشیده باشد.

DESTROYED

اتصال قطع شد

اتصال دستگاه قطع شده است یا اتصال سرویس ازدست رفته است.

RESUMED

موجود نیست

درحال‌حاضر چرخه عمر دستگاه از این وضعیت استفاده نمی‌کند یا آن را منتشر نمی‌کند.

بررسی و نظارت بر دردسترس بودن دستگاه

برای بررسی و نظارت بر دردسترس بودن دستگاه، از بافت پیش‌بینی‌شده همراه با وضعیت چرخه حیات استفاده می‌کنید تا تعیین کنید برنامه‌تان چگونه هر مورد را مدیریت کند:

    // 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 نشان می‌دهد که دستگاه دیگر روی دست بسته نشده است، بنابراین متوقف کردن این فرایندها برای جلوگیری از خالی شدن غیرضروری شارژ و ارتقای حریم خصوصی کاربر ضروری است.