Verifica la disponibilidad del dispositivo en el tiempo de ejecución para los lentes de audio y los lentes de visualización

Dispositivos de realidad extendida correspondientes
Esta guía te ayuda a crear experiencias para estos tipos de dispositivos de realidad extendida.
Audio y
gafas de visualización

A medida que un usuario pasa el día, sus lentes con audio o lentes con pantalla pueden perder la conexión con el dispositivo host (como el teléfono del usuario), o bien pueden no estar disponibles temporalmente si se las 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 Android Lifecycle.State. 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 las gafas.

Comprende los estados del ciclo de vida

En la siguiente tabla, se muestra cómo los indicadores de disponibilidad del dispositivo se asignan a los valores de Lifecycle.State.

Estado del ciclo de vida

Estado del dispositivo

Descripción

INITIALIZED

Creado

Se crea el objeto del ciclo de vida, pero aún no se observa.

CREATED

Inactiva

El servicio está conectado, pero el usuario no usa el dispositivo.

STARTED

Activa

El usuario usa el dispositivo.

DESTROYED

Desconectada

El dispositivo está desconectado o se perdió la conexión de servicio.

RESUMED

N/A

Actualmente, el ciclo de vida del dispositivo no usa ni emite este estado.

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 una conexión: Antes de acceder al ciclo de vida del dispositivo, llama a ProjectedContext.isProjectedDeviceConnected para verificar que el dispositivo proyectado esté conectado al dispositivo host.
  • Obtén un ProjectedContext: Solo llama a ProjectedContext.createProjectedDeviceContext después de verificar la conexión y asegúrate de pasar este contexto a tu instancia de XrDevice.
  • Controla la invalidación del contexto: Se genera un nuevo deviceId cada vez que se conecta un dispositivo proyectado. Una vez que el estado alcanza DESTROYED, el ProjectedContext actual no es válido. Deja de usarlo de inmediato y espera una nueva conexión.
  • Optimiza la batería y los recursos: Controla correctamente la funcionalidad de la app según el estado del ciclo de vida para preservar los recursos del sistema y reducir el consumo de batería. Por ejemplo, debes liberar recursos específicos de las gafas, como un flujo de datos de la cámara, cuando el estado pasa de STARTED a CREATED. El estado CREATED indica que ya no se usa el dispositivo, por lo que detener estos procesos es esencial para evitar el agotamiento innecesario de la batería y promover la privacidad del usuario.