Controllare la disponibilità del dispositivo in fase di runtime per gli occhiali AI

Durante la giornata, gli occhiali AI di un utente potrebbero perdere la connessione al dispositivo host (ad esempio lo smartphone dell'utente) o potrebbero non essere temporaneamente disponibili se l'utente li toglie. Per tenere conto di questi tipi di modifiche alla disponibilità dei dispositivi, la tua app può utilizzare l'API XR Device Availability, che consolida i segnali di disponibilità dei dispositivi nei valori Lifecycle.State standard di Android. Utilizza questa API per gestire il routing audio, l'attivazione della hotword e per sapere quando prevedere l'input dell'utente in base alla disponibilità degli occhiali AI.

Informazioni sugli stati del ciclo di vita

La seguente tabella mostra come i segnali di disponibilità dei dispositivi vengono mappati ai valori Lifecycle.State.

Stato del ciclo di vita

Stato del dispositivo

Descrizione

INITIALIZED

Creato

L'oggetto del ciclo di vita viene creato, ma non ancora osservato.

CREATED

Non attivo

Il servizio è connesso, ma l'utente non indossa il dispositivo.

STARTED

Attivo

L'utente indossa il dispositivo.

DESTROYED

Disconnesso

Il dispositivo è disconnesso o la connessione al servizio è persa.

Controllare e monitorare la disponibilità dei dispositivi

Per controllare e monitorare la disponibilità di un dispositivo, utilizzerai un contesto proiettato insieme allo stato del ciclo di vita per determinare come la tua app deve gestire ogni caso:

    val xrDevice = XrDevice.getCurrentDevice(projectedContext)

    xrDevice.getLifecycle().currentStateFlow
        .takeWhile { it != Lifecycle.State.DESTROYED }
        .collect { state ->
            when (state) {
                Lifecycle.State.STARTED -> { /* Device is ACTIVE (worn) */ }
                Lifecycle.State.CREATED -> { /* Device is INACTIVE (not worn) */ }
                else -> { /* Handle other states */ }
            }
        }
}

Punti chiave sul codice

  • Verificare la presenza di una connessione: prima di accedere al ciclo di vita del dispositivo, chiama ProjectedContext.isProjectedDeviceConnected per verificare che il dispositivo proiettato sia connesso al dispositivo host.
  • Ottenere un ProjectedContext: chiama ProjectedContext.createProjectedDeviceContext solo dopo aver verificato la connessione e assicurati di passare questo contesto all'istanza XrDevice.
  • Gestire l'invalidazione del contesto: ogni volta che un dispositivo proiettato si connette, viene generato un nuovo deviceId. Una volta che lo stato raggiunge DESTROYED, il ProjectedContext corrente non è valido. Smetti di utilizzarlo immediatamente e attendi una nuova connessione.
  • Ottimizzare la batteria e le risorse: gestisci correttamente le funzionalità dell'app in base allo stato del ciclo di vita per preservare le risorse di sistema e ridurre il consumo della batteria. Ad esempio, devi rilasciare le risorse specifiche per gli occhiali, come uno stream di dati della fotocamera, quando lo stato passa da STARTED a CREATED. Lo stato CREATED indica che il dispositivo non viene più indossato, quindi l'interruzione di questi processi è essenziale per evitare un consumo eccessivo della batteria e promuovere la privacy dell'utente.