Durante la giornata, gli occhiali audio o con display di un utente potrebbero
perdere la connessione al dispositivo host (ad es. 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à del dispositivo, la
tua app può utilizzare l'API XR Device Availability, che consolida i segnali di
disponibilità del dispositivo nei valori standard di Android Lifecycle.State. 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.
Informazioni sugli stati del ciclo di vita
La seguente tabella mostra come i segnali di disponibilità del dispositivo vengono mappati ai valori Lifecycle.State.
Stato del ciclo di vita |
Stato del dispositivo |
Descrizione |
|---|---|---|
|
Creato |
L'oggetto del ciclo di vita viene creato, ma non ancora osservato. |
|
Non attivo |
Il servizio è connesso, ma l'utente non indossa il dispositivo. |
|
Attivo |
L'utente indossa il dispositivo. |
|
Disconnesso |
Il dispositivo è disconnesso o la connessione al servizio è persa. |
Controllare e monitorare la disponibilità del dispositivo
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:
// 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 */ } } } }
Punti chiave sul codice
- Verificare la presenza di una connessione: prima di accedere al ciclo di vita del dispositivo, chiama
ProjectedContext.isProjectedDeviceConnectedper verificare che il dispositivo proiettato sia connesso al dispositivo host. - Ottenere un
ProjectedContext: chiamaProjectedContext.createProjectedDeviceContextsolo dopo aver verificato la connessione e assicurati di passare questo contesto all'istanzaXrDevice. - Gestire l'invalidazione del contesto: ogni volta che un
dispositivo proiettato si connette, viene generato un nuovo
deviceId. Una volta che lo stato raggiungeDESTROYED, l'attualeProjectedContextnon è 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
STARTEDaCREATED. Lo statoCREATEDindica 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 degli utenti.