Au cours de la journée, les lunettes audio ou d'affichage d'un utilisateur peuvent
perdre leur connexion à l'appareil hôte (comme son téléphone) ou être
temporairement indisponibles s'il les retire. Pour tenir compte de ces types de
changements dans la disponibilité des appareils, votre application peut utiliser
l'API XR Device Availability, qui consolide les signaux de disponibilité des
appareils dans les valeurs Lifecycle.State Android standards. Utilisez cette API pour gérer le routage audio, l'activation des mots clés et savoir quand attendre l'entrée utilisateur en fonction de la disponibilité des lunettes.
Comprendre les états du cycle de vie
Le tableau suivant indique comment les signaux de disponibilité des appareils sont mappés aux valeurs Lifecycle.State.
État du cycle de vie |
État de l'appareil |
Description |
|---|---|---|
|
Création |
L'objet de cycle de vie est créé, mais pas encore observé. |
|
Inactif |
Le service est connecté, mais l'utilisateur ne porte pas l'appareil. |
|
Actif |
L'utilisateur porte l'appareil. |
|
Déconnectée |
L'appareil est déconnecté ou la connexion au service est perdue. |
Vérifier et surveiller la disponibilité des appareils
Pour vérifier et surveiller la disponibilité d'un appareil, vous utiliserez un contexte projeté ainsi que l'état du cycle de vie pour déterminer comment votre application doit gérer chaque cas :
// 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 */ } } } }
Points clés concernant le code
- Vérifier une connexion : avant d'accéder au cycle de vie de l'appareil, appelez
ProjectedContext.isProjectedDeviceConnectedpour vérifier que l' appareil projeté est connecté à l'appareil hôte. - Obtenir un
ProjectedContext: n'appelezProjectedContext.createProjectedDeviceContextqu'après avoir vérifié la connexion, et assurez-vous de transmettre ce contexte à votre instanceXrDevice. - Gérer l'invalidation du contexte : un nouveau
deviceIdest généré chaque fois qu'un appareil projeté se connecte. Une fois que l'état atteintDESTROYED, leProjectedContextactuel n'est plus valide. Arrêtez immédiatement de l'utiliser et attendez une nouvelle connexion. - Optimiser la batterie et les ressources : gérez correctement les fonctionnalités de l'application
en fonction de l'état du cycle de vie pour préserver les ressources système et réduire la consommation de la batterie. Par exemple, vous devez libérer les ressources spécifiques aux lunettes, telles qu'un flux de données de caméra, lorsque l'état passe de
STARTEDàCREATED. L'étatCREATEDindique que l'appareil n'est plus porté. Il est donc essentiel d'arrêter ces processus pour éviter une décharge inutile de la batterie et promouvoir la confidentialité des utilisateurs.