Im Laufe des Tages kann es passieren, dass die Audio- oder Displaybrille eines Nutzers die Verbindung zum Hostgerät (z. B. dem Smartphone des Nutzers) verliert oder dass die Brille vorübergehend nicht verfügbar ist, wenn der Nutzer sie abnimmt. Um diese Arten von Änderungen der Geräteverfügbarkeit zu berücksichtigen, kann Ihre App die XR Device Availability API verwenden, die Signale zur Geräteverfügbarkeit in den Standardwerten Lifecycle.State von Android zusammenfasst. Mit dieser API können Sie die Audioausgabe und die Hotword-Aktivierung verwalten und wissen, wann Sie mit Nutzereingaben rechnen können, je nachdem, wann die Brille verfügbar ist.
Lebenszyklusstatus
In der folgenden Tabelle ist aufgeführt, wie Signale zur Geräteverfügbarkeit den Werten Lifecycle.State zugeordnet werden.
Lebenszyklusstatus |
Gerätestatus |
Beschreibung |
|---|---|---|
|
Erstellt |
Das Lebenszyklusobjekt wurde erstellt, aber noch nicht beobachtet. |
|
Inaktiv |
Der Dienst ist verbunden, aber der Nutzer trägt das Gerät nicht. |
|
Aktiv |
Der Nutzer trägt das Gerät. |
|
Nicht verbunden |
Das Gerät ist nicht verbunden oder die Dienstverbindung ist verloren gegangen. |
Geräteverfügbarkeit prüfen und überwachen
Um die Verfügbarkeit eines Geräts zu prüfen und zu überwachen, verwenden Sie einen projizierten Kontext zusammen mit dem Lebenszyklusstatus, um zu bestimmen, wie Ihre App in den einzelnen Fällen vorgehen soll:
// 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 */ } } } }
Wichtige Informationen zum Code
- Auf eine Verbindung prüfen: Bevor Sie auf den Gerätelebenszyklus zugreifen, rufen Sie
ProjectedContext.isProjectedDeviceConnectedauf, um zu prüfen, ob das projizierte Gerät mit dem Hostgerät verbunden ist. ProjectedContextabrufen: Rufen SieProjectedContext.createProjectedDeviceContexterst auf, nachdem Sie die Verbindung geprüft haben, und übergeben Sie diesen Kontext an IhreXrDeviceInstanz.- Mit der Ungültigkeit des Kontexts umgehen: Jedes Mal, wenn ein
projiziertes Gerät eine Verbindung herstellt, wird eine neue
deviceIdgeneriert. Sobald der StatusDESTROYEDerreicht ist, ist der aktuelleProjectedContextungültig. Verwenden Sie ihn nicht mehr und warten Sie auf eine neue Verbindung. - Akkulaufzeit und Ressourcen optimieren: Verarbeiten Sie die App-Funktionen
basierend auf dem Lebenszyklusstatus, um Systemressourcen zu schonen und den Akkuverbrauch zu senken. Sie sollten beispielsweise brillenspezifische Ressourcen wie einen Kameradatenstream freigeben, wenn der Status von
STARTEDwieder zuCREATEDwechselt. Der StatusCREATEDgibt an, dass das Gerät nicht mehr getragen wird. Daher ist es wichtig, diese Prozesse zu beenden, um unnötigen Akkuverbrauch zu vermeiden und die Privatsphäre der Nutzer zu schützen.