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:
Pending Intent erstellen: Erstelle einen expliziten
Intent, der auf die projizierte Zielaktivität verweist. Verpacken Sie den Intent in einenPendingIntentund legen SieFLAG_UPDATE_CURRENToderFLAG_IMMUTABLEfest, 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 ) }
Eingabeempfänger registrieren: Rufen Sie eine Instanz von
ProjectedActivityCompatab und registrieren Sie IhrenPendingIntentals designierten Eingabeempfänger, indem Sie ihn ansetActivityAsInputReceiverü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) }
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.
- Der Nutzer startet die Navigation, ohne dass Hintergrundmusik abgespielt wird.
- Die Navigations-App startet die projizierte Aktivität auf der Audiobrille.
- Da keine Mediensitzung aktiv ist, bleibt der Touchpad-Eingabefokus während der gesamten Fahrt bei der Navigations-App.
- 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.
- Der Nutzer startet die Navigation, während die Hintergrundmusik pausiert ist.
- In den Pausen zwischen den Ansagen wechselt der Eingabefokus standardmäßig zur Mediensteuerung.
- Wenn die Navigations-App „In 150 Metern links abbiegen“ sagt, erhält sie den Eingabefokus.
- 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.
- Der Nutzer startet die Navigation, während Musik abgespielt wird.
- Während der Wiedergabe von Navigationshinweisen wird die Lautstärke von Hintergrundaudio verringert und der Eingabefokus auf die Navigations-App verschoben.
- 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.