В течение дня аудио- или видеоочки могут потерять связь с основным устройством (например, телефоном) или стать временно недоступными, если пользователь их снимет. Чтобы учитывать такие изменения в доступности устройств, ваше приложение может использовать API доступности 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означает, что устройство больше не используется, поэтому остановка этих процессов необходима, чтобы предотвратить ненужный расход заряда батареи и обеспечить конфиденциальность пользователя.