Physisches Eingaberouting für Audio-Brillen

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-Brillen

Bei Audio-Brillen leitet das System physische Eingaben (z. B. Touchpad-Gesten oder Tastendrücke) basierend auf der Aufmerksamkeit des Nutzers und nicht auf dem Fokus der visuellen Anzeige weiter. Da Nutzer keine Benutzeroberfläche sehen können, leitet das System physische Eingaben an die projizierte Aktivität der App weiter, die der Nutzer gerade wahrnimmt oder mit der er aktiv interagiert.

So ermittelt das System die Aufmerksamkeit des Nutzers

Das System ermittelt die Aufmerksamkeit des Nutzers, indem es überwacht, welche der folgenden Datenstreams aktiv sind:

  • Audioausgabestreams: Sprachausgabe, Audiohinweise oder Medienwiedergabe.
  • Mikrofonaufnahmestreams: Laufende Sprachbefehle oder Audioaufnahmen aus der Umgebung eines Nutzers.
  • Kameraaufnahmestreams: Video- oder Fotostreams.

Einige Datenstreams sind vorübergehend und werden nur für kurze Zeit vom Nutzer wahrgenommen. Beispiel: Eine Audioausgabe der nächsten Abbiegung, die ein Nutzer bei der Navigation auf einer Route nehmen sollte. Andere Datenstreams sind unbegrenzt und bleiben so lange im Bewusstsein der Nutzer, wie sie fortgesetzt werden. Beispiel: Medienwiedergabe mit einer endlosen, zufälligen Playlist. Wenn ein vorübergehender Datenstream einen unbegrenzten Datenstream unterbricht, wird er vorübergehend vom Nutzer wahrgenommen.

Gleichzeitigkeit und Eingabefokus

Nutzer verwenden oft mehrere Apps gleichzeitig auf Audiobrillen. Ein Nutzer kann beispielsweise Musik hören, während er die detaillierte Routenführung verwendet. In diesen Fällen weist das System einen Nebenläufigkeitsstatus zu und verschiebt den Eingabefokus so, dass er mit dem Audiofokus übereinstimmt. Dazu wird Folgendes getan:

  • Fortsetzen oder Beenden der projizierten Aktivität Ihrer App.
  • Physische Eingabe wird an die projizierte Aktivität im Vordergrund weitergeleitet.

Dieser Ansatz trägt zu einer einheitlichen Nutzererfahrung bei.

Das System startet die projizierte Aktivität neu

Wenn deine App die Aufmerksamkeit des Nutzers erlangt, insbesondere wenn die projizierte Aktivität im Hintergrund ausgeführt wurde, muss das System in der Lage sein, die Aktivität fortzusetzen und physische Eingaben an sie weiterzuleiten.

So sorgen Sie dafür, dass das System Ihre Aktivität neu starten kann:

  1. Pending Intent erstellen: Erstelle einen expliziten Intent, der auf die projizierte Zielaktivität verweist. Verpacken Sie den Intent in einen PendingIntent und legen Sie FLAG_UPDATE_CURRENT oder FLAG_IMMUTABLE fest, um ein sicheres und vorhersehbares Startverhalten beizubehalten:

    // Build an explicit Intent pointing to this projected activity and wrap it in a
    // PendingIntent so the system can relaunch it and route physical input to it.
    private val pendingIntent: PendingIntent by lazy {
        val intent = Intent(this, ProjectedInputFocusActivity::class.java)
    
        PendingIntent.getActivity(
            this,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        )
    }

  2. Eingabeempfänger registrieren: Rufen Sie eine Instanz von ProjectedActivityCompat ab und registrieren Sie Ihren PendingIntent als designierten Eingabeempfänger, indem Sie ihn an setActivityAsInputReceiver übergeben.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    
        lifecycleScope.launch {
            // Create or obtain the ProjectedActivityCompat instance
            val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity)
    
            // Register the PendingIntent as the designated input receiver
            projectedActivity.setActivityAsInputReceiver(pendingIntent)
        }

  3. Eingabeempfänger beim Bereinigen löschen: Wenn deine Aktivität gelöscht wird oder keine physischen Eingaben mehr empfangen muss, lösche den Eingabeempfänger, um veraltete PendingIntent-Weiterleitungen und Speicherlecks zu vermeiden.

    override fun onDestroy() {
        super.onDestroy()
        lifecycleScope.launch {
            val projectedActivity = ProjectedActivityCompat.create(this@ProjectedInputFocusActivity)
            projectedActivity.clearActivityAsInputReceiver()
        }
    }

So verschiebt sich der Eingabefokus zwischen Nebenläufigkeitszuständen

Um zu bestimmen, welche App den Eingabefokus erhält, wertet das System aktive Datenstreams aus und leitet die Eingabe basierend auf diesen Gleichzeitigkeitsstatus weiter:

Nebenläufigkeitsstatus Umgebungskontext Systemverhalten und Eingabefokus Beispiel

Nicht gleichzeitig

Eine eigenständige projizierte Aktivität ist aktiv. Es wird keine Hintergrund-Mediensitzung ausgeführt.

Der Eingabefokus wird vollständig auf die projizierte Aktivität gerichtet, auch während der Pausen zwischen den Auslesevorgängen.

Ein Nutzer verwendet eine App zum Aufzeichnen von Trainings. Auch wenn er gerade nichts sagt, werden Touchpad-Eingaben direkt an die Fitness-App weitergeleitet.

Teilweise gleichzeitig

Eine projizierte Aktivität ist aktiv, aber es gibt eine Mediensitzung im Hintergrund, die pausiert ist.

Der Eingabefokus wechselt standardmäßig zur Mediensteuerung, wenn die App gerade keine Inhalte vorliest.

Ein Nutzer führt eine Workout-Tracking-App aus, während die Musik pausiert ist. Zwischen den Updates des Fitness-Coachs wird durch Tippen auf das Touchpad die Musik fortgesetzt, anstatt eine Trainingsfunktion auszulösen.

Gleichzeitig

Die duale Wiedergabe ist aktiv (z. B. wenn die Audioansage Ihrer App die Hintergrundmusik unterbricht oder dämpft).

Audiofokus entspricht Eingabefokus.

Der Eingabefokus wird während aktiver Vorlesevorgänge auf die projizierte Aktivität geleitet und kehrt zur Mediensteuerung zurück, wenn der Audiostream endet.

Ein Nutzer hört Musik, während eine Navigations-App eine Anweisung vorliest. Während des Vorlesens erhält die Navigations-App den Eingabefokus. Nachdem die Ansage beendet ist, wechselt der Eingabefokus wieder zur Mediensteuerung.

Sicherheitsmaßnahmen für das System-Timing

Das System bietet die folgenden Schutzmaßnahmen, um versehentliche Eingaben oder unerwartetes Verhalten für Nutzer zu verhindern:

  • Kulanzzeiträume für neu gestartete projizierte Aktivitäten: Um das Laden von Assets beim Kaltstart oder Netzwerkverzögerungen zu berücksichtigen, erhalten neu gestartete projizierte Aktivitäten einen kurzen Kulanzzeitraum, um einen Datenstream einzurichten und die Aufmerksamkeit des Nutzers zu gewinnen, bevor das System die projizierte Aktivität beendet und in den Hintergrund verschiebt.
  • Der Fokus wird basierend auf der Nutzeraufmerksamkeit weitergeleitet: Wenn sich die Nutzeraufmerksamkeit durch einen neuen, aktiven Datenstream wie eine Audioausgabe ändert, setzt das System die projizierte Aktivität sofort fort und leitet den Eingabefokus dorthin weiter.
  • Übergangspuffer während der Medienwiedergabe: Wenn eine vorübergehende Ausgabe während der Medienwiedergabe im Hintergrund abgeschlossen wird, bleibt der Eingabefokus vorübergehend bei der projizierten Aktivität. Die Pufferzeit hilft, versehentliche Eingaben zu vermeiden, z. B. wenn ein Nutzer versucht, die Sprachausgabe stummzuschalten, aber stattdessen einen Musiktitel überspringt. Nach dem Übergangspuffer beendet das System die projizierte Aktivität der App und leitet den Eingabefokus an die Mediensteuerung weiter.
  • Inaktive projizierte Aktivitäten werden beendet oder pausiert: Das System beendet alle inaktiven projizierten Aktivitäten ohne aktive Datenstreams nach einigen Minuten (oder vorübergehend bei laufender Medienausgabe, wenn sie pausiert ist).

Übergänge des Eingabefokus in der Praxis

Sehen Sie sich die folgenden Beispielszenarien für eine Navigations-App mit detaillierter Routenführung an, um zu verstehen, wie der Eingabefokus zwischen den Nebenläufigkeitszuständen wechselt:

Szenario A: Nicht gleichzeitig (inaktive Medien)

In diesem Szenario leitet das System die Eingabe an die Navigations-App weiter, die während der gesamten Fahrt den Nutzerfokus hat.

Abbildung 1: Wie der Eingabefokus für eine Navigations-App in diesem nicht gleichzeitigen Szenario weitergeleitet wird.
  1. Der Nutzer startet die Navigation, ohne dass Hintergrundmusik abgespielt wird.
  2. Die Navigations-App startet die projizierte Aktivität auf der Audiobrille.
  3. Da keine Mediensitzung aktiv ist, bleibt der Touchpad-Eingabefokus während der gesamten Fahrt bei der Navigations-App.
  4. Nutzeraktionen: Durch Tippen während einer aktiven Ansage kann die Sprachausgabe stummgeschaltet werden. Wenn du während einer Pause tippst, wird die letzte Anweisung wiederholt.

Szenario B: Semi-gleichzeitig (pausierte Medien)

In diesem Szenario leitet das System die Eingabe an die Mediensteuerung des Systems weiter, wenn die Navigations-App nicht die Aufmerksamkeit des Nutzers hat.

Abbildung 2: Wie der Eingabefokus für eine Navigations-App in diesem halbgleichzeitigen Szenario weitergeleitet wird.
  1. Der Nutzer startet die Navigation, während die Hintergrundmusik pausiert ist.
  2. In den Pausen zwischen den Ansagen wechselt der Eingabefokus standardmäßig zur Mediensteuerung.
  3. Wenn die Navigations-App „In 150 Metern links abbiegen“ sagt, erhält sie den Eingabefokus.
  4. Nutzeraktionen: Durch Tippen während der Ansage kann die Sprachausgabe stummgeschaltet werden. Wenn du während der Stille auf das Touchpad tippst, wird die Musikwiedergabe fortgesetzt.

Szenario C: Gleichzeitig (aktive Medien)

In diesem Szenario leitet das System die Eingabe an die Systemmediensteuerung weiter, wenn die Navigations-App nicht die Aufmerksamkeit des Nutzers hat. Das Audio der aktiven Medienwiedergabe wird während jeder Ansage der Navigations-App gedämpft.

Abbildung 3: Wie der Eingabefokus für eine Navigations-App in diesem gleichzeitigen Szenario weitergeleitet wird.
  1. Der Nutzer startet die Navigation, während Musik abgespielt wird.
  2. Während der Wiedergabe von Navigationshinweisen wird die Lautstärke von Hintergrundaudio verringert und der Eingabefokus auf die Navigations-App verschoben.
  3. Nutzeraktionen: Durch Tippen während der Ansage kann die Sprachausgabe stummgeschaltet werden. Wenn du während einer Ruhephase auf das Touchpad tippst, wird die Medienwiedergabe pausiert oder fortgesetzt.