A medida que el usuario realiza sus actividades diarias, es posible que sus lentes de audio o lentes con pantalla pierdan la conexión con el dispositivo host (como el teléfono del usuario) o que los lentes no estén disponibles temporalmente si se los quita. Para tener en cuenta este tipo de cambios en la disponibilidad del dispositivo, tu app puede usar la API de XR Device Availability, que consolida los indicadores de disponibilidad del dispositivo en los valores estándar de Lifecycle.State de Android. Usa esta API para administrar el enrutamiento de audio, la activación de palabras clave y saber cuándo esperar la entrada del usuario según la disponibilidad de los lentes.
Comprende los estados del ciclo de vida
En la siguiente tabla, se muestra cómo se asignan los indicadores de disponibilidad del dispositivo a los valores de Lifecycle.State.
Estado del ciclo de vida |
Estado del dispositivo |
Descripción |
|---|---|---|
|
Creado |
Se crea el objeto de ciclo de vida, pero aún no se observa. |
|
Inactiva |
El servicio está conectado, pero el usuario no está usando el dispositivo. |
|
Activa |
El usuario lleva puesto el dispositivo. |
|
Desconectada |
El dispositivo está desconectado o se perdió la conexión de servicio. |
Verifica y supervisa la disponibilidad del dispositivo
Para verificar y supervisar la disponibilidad de un dispositivo, usarás un contexto proyectado junto con el estado del ciclo de vida para determinar cómo debe controlar tu app cada caso:
// 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 */ } } } }
Puntos clave sobre el código
- Verifica si hay una conexión: Antes de acceder al ciclo de vida del dispositivo, llama a
ProjectedContext.isProjectedDeviceConnectedpara verificar que el dispositivo proyectado esté conectado al dispositivo host. - Obtén un
ProjectedContext: Solo llama aProjectedContext.createProjectedDeviceContextdespués de verificar la conexión y asegúrate de pasar este contexto a tu instancia deXrDevice. - Controla la invalidación del contexto: Se genera un nuevo
deviceIdcada vez que se conecta un dispositivo proyectado. Una vez que el estado alcanzaDESTROYED, elProjectedContextactual no es válido. Deja de usarlo de inmediato y espera una nueva conexión. - Optimiza la batería y los recursos: Controla con elegancia la funcionalidad de la app según el estado del ciclo de vida para conservar los recursos del sistema y reducir el consumo de batería. Por ejemplo, debes liberar los recursos específicos de los lentes, como un flujo de datos de la cámara, cuando el estado pasa de
STARTEDaCREATED. El estadoCREATEDindica que el dispositivo ya no se está usando, por lo que detener estos procesos es fundamental para evitar el agotamiento innecesario de la batería y promover la privacidad del usuario.