Geräteverfügbarkeit zur Laufzeit für Audio- und Displaybrillen prüfen

XR‑Geräte, für die der Leitfaden gilt
Dieser Leitfaden hilft Ihnen dabei, Erlebnisse für die folgenden Arten von XR-Geräten zu entwickeln.
Audio- &
Displaybrillen

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 die Brille vorübergehend nicht verfügbar ist, wenn der Nutzer sie abnimmt. Um diese Art 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 das Audio-Routing und die Hotword-Aktivierung verwalten und erfahren, wann mit Nutzereingaben zu rechnen ist, je nachdem, wann die Brille verfügbar ist.

Lebenszyklusstatus

In der folgenden Tabelle sehen Sie, wie die Signale zur Geräteverfügbarkeit den Lifecycle.State-Werten zugeordnet werden.

Lebenszyklusstatus

Gerätestatus

Beschreibung

INITIALIZED

Erstellt

Das Lebenszyklusobjekt wurde erstellt, wird aber noch nicht beobachtet.

CREATED

Inaktiv

Der Dienst ist verbunden, aber der Nutzer trägt das Gerät nicht.

STARTED

Aktiv

Der Nutzer trägt das Gerät.

DESTROYED

Nicht verbunden

Das Gerät ist nicht verbunden oder die Dienstverbindung ist unterbrochen.

RESUMED

Dieser Status wird im Gerätelebenszyklus derzeit nicht verwendet oder ausgegeben.

Geräteverfügbarkeit prüfen und im Blick behalten

Um die Verfügbarkeit eines Geräts zu prüfen und zu überwachen, verwenden Sie einen projizierten Kontext zusammen mit dem Lebenszyklusstatus, um festzulegen, wie Ihre App die einzelnen Fälle behandeln 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 Punkte zum Code

  • Verbindung prüfen: Bevor Sie auf den Gerätelebenszyklus zugreifen, rufen Sie ProjectedContext.isProjectedDeviceConnected auf, um zu prüfen, ob das projizierte Gerät mit dem Hostgerät verbunden ist.
  • ProjectedContext abrufen: Rufen Sie ProjectedContext.createProjectedDeviceContext erst auf, nachdem Sie die Verbindung überprüft haben, und übergeben Sie diesen Kontext an Ihre XrDevice-Instanz.
  • Kontextungültigkeit verarbeiten: Jedes Mal, wenn ein Gerät mit Projektionsfläche verbunden wird, wird ein neues deviceId generiert. Sobald der Status DESTROYED erreicht ist, ist die aktuelle ProjectedContext ungültig. Verwenden Sie es sofort nicht mehr und warten Sie auf eine neue Verbindung.
  • Akku und Ressourcen optimieren: App-Funktionen basierend auf dem Lebenszyklusstatus ordnungsgemäß verarbeiten, um Systemressourcen zu schonen und den Akkuverbrauch zu reduzieren. Beispielsweise sollten Sie brillenspezifische Ressourcen wie einen Kameradatenstream freigeben, wenn der Status von STARTED zurück zu CREATED wechselt. Der Status CREATED gibt an, dass das Gerät nicht mehr getragen wird. Das Beenden dieser Prozesse ist daher wichtig, um unnötigen Akkuverbrauch zu vermeiden und den Datenschutz zu gewährleisten.