Für die Interaktion mit Apps auf TV-Geräten ist ein sekundäres Hardwaregerät erforderlich, z. B. eine einfache Fernbedienung, eine Fernbedienung mit Zeiger oder ein Gamecontroller. Damit die Nutzerfreundlichkeit einheitlich ist, muss Ihre App die Eingabe über das Steuerkreuz unterstützen, mit Controllern umgehen können, die offline gehen, und die Eingabe über mehrere Controllertypen unterstützen, einschließlich Zeigerfernbedienungen.
Mindestanzahl an Steuerelementen für Steuerkreuz
Der Standardcontroller für ein TV-Gerät ist ein Steuerkreuz. Im Allgemeinen muss deine App über eine Fernbedienung bedienbar sein, die nur die Tasten „Nach oben“, „Nach unten“, „Nach links“, „Nach rechts“, „Auswählen“, „Zurück“ und „Startbildschirm“ hat. Wenn es sich bei Ihrer App um ein Spiel handelt, für das normalerweise ein Controller mit zusätzlichen Steuerelementen erforderlich ist, versuchen Sie, das Gameplay nur mit diesen Steuerkreuz-Steuerelementen zu unterstützen. Andernfalls solltest du den Nutzer darauf hinweisen, dass ein Controller erforderlich ist, und ihm die Möglichkeit geben, das Spiel über das Steuerkreuz zu beenden.
Weitere Informationen zur Navigation mit Steuerkreuzen für TV-Geräte findest du unter TV-Navigation.
Umgang mit Controller-Verbindungsabbrüchen
Controller für Fernseher sind häufig Bluetooth-Geräte, die möglicherweise versuchen, Strom zu sparen, indem sie regelmäßig in den Ruhemodus wechseln und die Verbindung zum Fernseher trennen. Das bedeutet, dass eine Anwendung möglicherweise unterbrochen oder neu gestartet wird, wenn sie nicht für die Verarbeitung dieser Ereignisse zur Wiederherstellung der Verbindung konfiguriert ist. Diese Ereignisse können in den folgenden Fällen auftreten:
- Während der Wiedergabe eines Videos, das mehrere Minuten lang ist, kann es passieren, dass ein Steuerkreuz oder Gamecontroller in den Ruhemodus wechselt, die Verbindung zum Fernseher trennt und später wieder herstellt.
- Während des Spiels kann ein neuer Spieler mit einem Controller beitreten, der noch nicht verbunden ist.
- Während des Spiels kann ein Spieler das Spiel verlassen und einen Controller trennen.
Alle Aktivitäten in der TV-App, die von Verbindungs- und Verbindungstrennungsereignissen betroffen sind, müssen so konfiguriert sein, dass Ereignisse zur Wiederherstellung der Verbindung im App-Manifest verarbeitet werden. Im folgenden Codebeispiel wird gezeigt, wie Sie eine Aktivität aktivieren, um Konfigurationsänderungen zu verarbeiten, einschließlich des Verbindens, Trennens oder erneuten Verbindens einer Tastatur oder eines Navigationsgeräts:
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|navigation"
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
...
</activity>
Durch diese Konfigurationsänderung kann die App bei einer erneuten Verbindung weiter ausgeführt werden, anstatt vom Android-Framework neu gestartet zu werden, was die Nutzerfreundlichkeit beeinträchtigen würde.
Variationen bei der Eingabe über das Steuerkreuz verarbeiten
Nutzer von TV-Geräten haben möglicherweise mehr als einen Controllertyp, den sie mit ihrem Fernseher verwenden. Ein Nutzer kann beispielsweise einen einfachen Steuerkreuz-Controller, eine Zeigerfernbedienung oder einen Gamecontroller haben. Die Tastencodes, die ein Gamecontroller bei der Verwendung für Steuerkreuzfunktionen bereitstellt, können sich von den Tastencodes unterscheiden, die von einem einfachen Steuerkreuz gesendet werden.
Berücksichtige die verschiedenen Eingabemöglichkeiten über das Steuerkreuz, damit Nutzer nicht den Controller wechseln müssen, um deine App zu bedienen. Weitere Informationen zum Umgang mit verschiedenen Eingabemöglichkeiten findest du unter Eingaben über das Steuerkreuz verarbeiten.
Fernbedienungen mit Zeiger unterstützen
Einige TV-Geräte unterstützen Zeigerfernbedienungen, z. B. Air-Mäuse oder Fernbedienungen mit berührungsempfindlichen Steuerkreuzen (Trackpads). Wenn du Pointer-Fernbedienungen unterstützt, können Nutzer mit deiner App über Point-and-Click-, Hover-, Wisch- und Ziehgesten interagieren. Das sorgt für eine flüssigere Bedienung auf kompatibler Hardware, während die volle Kompatibilität mit Steuerkreuzen erhalten bleibt.
Unterstützung für Pointer Remote im Manifest deklarieren
Wenn Sie angeben möchten, dass Ihre App mit Zeiger- und Touch-Eingabe navigierbar ist, konfigurieren Sie Ihr App-Manifest mit dem android.software.leanback.supports_touch
<property>, der im <application>-Element (oder in einzelnen <activity>-Elementen, um die Unterstützung pro Aktivität zu konfigurieren) auf true gesetzt ist:
<manifest ...>
<!-- Signal whether the app is adaptive or built just for TV -->
<uses-feature
android:name="android.software.leanback"
android:required="true|false" />
<!-- Ensure the app can be installed on conventional TVs -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<application ...>
<!-- Signal whether the app supports pointer remotes -->
<property
android:name="android.software.leanback.supports_touch"
android:value="true" />
...
</application>
</manifest>
Klick-, Mouseover- und Scrollinteraktionen werden unterstützt.
Wenn du Pointer-Fernbedienungen unterstützt, achte darauf, dass deine UI-Komponenten bei den folgenden Interaktionen angemessen auf Cursor- und Touch-Eingaben reagieren:
- Klicken und Auswählen: Alle fokussierbaren, auswählbaren UI-Elemente müssen mit der Zeigerfernbedienung anklickbar sein, was dem Verhalten der Auswahl über das Steuerkreuz (
KEYCODE_DPAD_CENTER) entspricht.- Jetpack Compose: Verwenden Sie die Modifikatoren
Modifier.clickable()oderpointerInput. Weitere Informationen findest du unter Tippen und drücken. - Ansichten: Click-Events für Ansichten verarbeiten. Weitere Informationen finden Sie in der Übersicht über Eingabeereignisse.
- Jetpack Compose: Verwenden Sie die Modifikatoren
- Visuelle Hover-Zustände: Ein klarer visueller Hover-Effekt zeigt an, wenn sich der Mauszeiger über einem auswählbaren Element befindet.
- Jetpack Compose: Verwenden Sie
Modifier.hoverable()oder beobachten Sie den Hover-Status mit einemInteractionSource. Weitere Informationen findest du unter Nutzerinteraktionen verarbeiten. - Ansichten: Definiere Hover-Zustände mit State-List-Drawables mit
android:state_hovered="true".
- Jetpack Compose: Verwenden Sie
- Wischen und Scrollen: Horizontales und vertikales Scrollen, das durch Wischen oder schnelles Wischen auf der berührungsempfindlichen mittleren Taste des Steuerkreuzes ausgelöst wird, muss bei allen scrollbaren Inhalten reibungslos funktionieren.
- Scrollen durch Ziehen: Nutzer müssen in der Lage sein, durch Ziehen vertikal (nach oben und unten) oder horizontal (nach links und rechts) durch scrollbare Container zu scrollen.
- Jetpack Compose: Standardmäßige scrollbare Container unterstützen standardmäßig das Scrollen mit dem Zeiger und per Touchbedienung. Informationen zu benutzerdefinierten Implementierungen finden Sie unter Pointer input in Compose.
- Ansichten: Standardmäßige scrollbare Ansichten unterstützen standardmäßig das Scrollen per Berührung. Informationen zur benutzerdefinierten Eingabeverarbeitung finden Sie unter Touchbedienung und Eingabe.
- Scrubbing bei der Medienwiedergabe: Während der Medienwiedergabe (z. B. von Serien und Filmen) müssen Nutzer mit der Fortschrittsanzeige (Steuerleiste) interagieren können, indem sie darauf zeigen und klicken, um zu einem vergangenen oder zukünftigen Zeitstempel zu springen, oder indem sie die Fortschrittsanzeige entlangziehen (Scrubbing), um zu einer bestimmten Zeit zu springen.
Tastenereignisse verarbeiten
Wenn der Nutzer auf eine Taste auf einem Controller klickt, empfängt deine App ein Ereignis mit einem KeyEvent. Das beabsichtigte Verhalten für die Taste kann ein Medienereignis wie „Wiedergabe“, „Pause“ oder „Stopp“ oder ein TV-Ereignis wie „Auswahl“ oder „Navigation“ sein. Für eine gute Nutzererfahrung solltest du den Controller-Tasten einheitliche Verhaltensweisen zuweisen.
TV-UI-Ereignisse
Weisen Sie den Tasten, die KeyEvent-Typen generieren, das Verhalten der TV-Benutzeroberfläche zu, wie in der folgenden Tabelle dargestellt:
KeyEvent |
Verhalten |
|---|---|
KEYCODE_BUTTON_B, KEYCODE_BACK |
Zurück |
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
Auswahl |
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHT |
Navigation |
Medienereignisse
Wenn der Nutzer Medien ansieht, weise den Buttons, die KeyEvent-Typen generieren, ein Verhalten zu, wie in der folgenden Tabelle gezeigt. Wenn deine App einen MediaSession steuert, verwende einen MediaControllerAdapter, um eine der in der Tabelle aufgeführten MediaControllerCompat.TransportControls-Methoden aufzurufen. Die Auswahltasten fungieren in diesem Kontext als Wiedergabe- oder Pausetasten.
KeyEvent |
TransportControls-Aufruf | Verhalten |
|---|---|---|
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
play() |
Play |
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER |
pause() |
Pausieren |
BUTTON_R1 |
skipToNext() |
Vorwärts springen |
BUTTON_L1 |
skipToPrevious() |
Rückwärts springen |
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLE |
fastForward() |
Vorspulen |
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKE |
rewind() |
Zurückspulen |
| – | stop() |
Beenden |
Angemessenes Verhalten des Buttons „Zurück“
Der Button „Zurück“ darf nie als Ein/Aus-Schalter fungieren. Verwenden Sie sie beispielsweise nicht, um ein Menü sowohl zu öffnen als auch zu schließen. Verwenden Sie sie nur, um im Breadcrumb-Stil rückwärts durch die vorherigen Bildschirme zu navigieren, die der Spieler besucht hat.
Da der Button „Zurück“ nur eine lineare Rückwärtsnavigation ermöglicht, kannst du ihn verwenden, um ein In-App-Menü zu verlassen, das über einen anderen Button geöffnet wurde, und zur App zurückzukehren. Durch wiederholtes Drücken des Buttons „Zurück“ muss der Nutzer immer zum Android TV-Startbildschirm gelangen. Beispiel: Gameplay > Pausenbildschirm > Hauptbildschirm des Spiels > Android TV-Startbildschirm oder Wiedergabe einer TV-Sendung > Hauptbildschirm der TV-App
Android TV-Startbildschirm
Weitere Informationen zum Design für die Navigation findest du unter Zurück- und Aufwärtsnavigation entwerfen. Informationen zur Implementierung finden Sie unter Für richtige Rückwärtsnavigation sorgen.
Umgang mit Controllern für Spiele
Wenn du Spiele für Android TV entwickelst, solltest du die Steuerung so gestalten, dass sie sowohl mit Standard-TV-Fernbedienungen als auch mit speziellen Gamecontrollern funktioniert.
Unterstützung für Steuerkreuz
Plane dein Steuerungsschema für ein Steuerkreuz, da diese Steuerung die Standardeinstellung für Android TV-Geräte ist. Der Spieler muss das Steuerkreuz für alle Aspekte des Spiels verwenden können – nicht nur für das Gameplay, sondern auch für die Navigation in Menüs und Anzeigen. Achte daher darauf, dass in deinem Android TV-Spiel nicht auf eine Touch-Oberfläche verwiesen wird, z. B. mit „Tippe hier, um fortzufahren“.
Wie du die Interaktion des Spielers mit dem Controller gestaltest, kann entscheidend für eine gute Nutzererfahrung sein. Folgende Best Practices können dabei hilfreich sein:
- Anforderungen an Controller im Voraus kommunizieren: Informiere Spieler in der Google Play-Beschreibung über die Anforderungen an Controller. Wenn ein Spiel besser für ein Gamepad mit Joystick als für eines mit Steuerkreuz geeignet ist, solltest du das deutlich machen. Ein Spieler, der einen ungeeigneten Controller für ein Spiel verwendet, hat möglicherweise ein schlechtes Spielerlebnis und bewertet dein Spiel schlecht.
- Einheitliche Tastenbelegung verwenden: Eine intuitive Tastenbelegung ist entscheidend für eine gute Nutzererfahrung. Halte dich beispielsweise an die gängigen Konventionen, indem du die A-Taste zum Akzeptieren und die B-Taste zum Abbrechen verwendest. Du kannst auch Flexibilität bieten, indem du Nutzern erlaubst, Tasten neu zu belegen. Weitere Informationen zur Tastenbelegung findest du unter Controller-Aktionen verarbeiten.
- Controller-Funktionen erkennen und entsprechend anpassen: Frage den Controller nach seinen Funktionen, um die Abstimmung zwischen Controller und Spiel zu optimieren. Beispielsweise möchtest du, dass ein Spieler ein Objekt steuert, indem er den Controller in der Luft bewegt. Wenn der Controller des Spielers jedoch keine Beschleunigungsmesser- und Gyroskophardware hat, funktioniert das Bewegen nicht. Frage den Controller ab und wechsle zu einem alternativen, verfügbaren Steuerungsschema, wenn die Bewegungserkennung nicht unterstützt wird. Weitere Informationen zum Abfragen von Controller-Funktionen finden Sie unter Controller in verschiedenen Android-Versionen unterstützen.
Geeignete Schaltflächen verwenden
Nicht alle Controller haben Start-, Such- oder Menütasten. Achten Sie darauf, dass Ihre Benutzeroberfläche nicht von der Verwendung dieser Tasten abhängt.
Mehrere Controller verarbeiten
Wenn mehrere Spieler ein Spiel spielen und jeder einen eigenen Controller hat, ist es wichtig, jedes Spieler-Controller-Paar zuzuordnen. Informationen zum Implementieren der Controller-Nummer-Identifikation finden Sie unter getControllerNumber().
Umgang mit Controller-Verbindungsabbrüchen
Wenn die Verbindung zu einem Controller während des Spiels getrennt wird, pausiere das Spiel und zeige ein Dialogfeld an, in dem der Spieler aufgefordert wird, den Controller wieder zu verbinden.
Bieten Sie im Dialogfeld auch Tipps zur Fehlerbehebung an. Fordere den Spieler beispielsweise auf, die Bluetooth-Verbindung zu prüfen. Weitere Informationen zur Implementierung der Unterstützung von Eingabegeräten finden Sie unter Controller-Aktionen verarbeiten und in der Bluetooth-Übersicht.
Controller-Anleitung einblenden
Wenn dein Spiel eine visuelle Anleitung für die Steuerung enthält, verwende ein Controller-Bild ohne Branding und füge nur mit Android kompatible Tasten hinzu.
Beispielbilder eines Android-kompatiblen Controllers findest du in der Android TV-Gamepad-Vorlage (ZIP). Es enthält einen weißen Controller auf schwarzem Hintergrund und einen schwarzen Controller auf weißem Hintergrund (siehe Abbildung 1) als PNG-Datei und als Adobe® Illustrator®-Datei.