TV-Controller verwalten

Für die Interaktion mit Apps auf Fernsehern ist ein sekundäres Hardwaregerät erforderlich, z. B. eine einfache Fernbedienung, eine Zeigerfernbedienung oder ein Gamecontroller. Damit Nutzer eine einheitliche Erfahrung haben, muss Ihre App die Eingabe über das Steuerkreuz unterstützen, den Offlinebetrieb von Controllern verarbeiten und Eingaben von mehreren Controllertypen, einschließlich Zeigerfernbedienungen, unterstützen.

Mindeststeuerung mit dem Steuerkreuz

Die Standardsteuerung für ein TV-Gerät ist ein Steuerkreuz. Im Allgemeinen muss deine App mit einer Fernbedienung bedient werden können, die nur die Tasten „Nach oben“, „Nach unten“, „Nach links“, „Nach rechts“, „Auswählen“, „Zurück“ und „Startbildschirm“ hat. Wenn Ihre App ein Spiel ist, 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 warnen Sie den Nutzer, dass ein Controller erforderlich ist, und ermöglichen Sie ihm, das Spiel über das Steuerkreuz zu beenden.

Weitere Informationen zur Navigation mit Steuerkreuz-Controllern für Fernseher findest du unter TV-Navigation.

Umgang mit getrennten Controllern

Controller für Fernseher sind häufig Bluetooth-Geräte, die versuchen, Strom zu sparen, indem sie regelmäßig in den Ruhemodus wechseln und die Verbindung zum Fernseher trennen. Das bedeutet, dass eine App unterbrochen oder neu gestartet werden kann, wenn sie nicht für die Verarbeitung dieser Ereignisse konfiguriert ist. Diese Ereignisse können unter folgenden Umständen eintreten:

  • Während der Wiedergabe eines Videos, das mehrere Minuten lang ist, kann es passieren, dass das Steuerkreuz oder der Controller in den Ruhemodus wechselt, die Verbindung zum Fernseher getrennt und später wiederhergestellt wird.
  • Während des Spiels kann ein neuer Spieler dem Spiel 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 von TV-Apps, die Trennungs- und Wiederverbindungsereignissen unterliegen, müssen so konfiguriert sein, dass sie Wiederverbindungsereignisse im App-Manifest verarbeiten. Der folgende Beispielcode zeigt, wie eine Aktivität für die Verarbeitung von Konfigurationsänderungen aktiviert wird, 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 nach einer erneuten Verbindung weiter ausgeführt werden, anstatt vom Android-Framework neu gestartet zu werden, was keine gute Nutzererfahrung ist.

Umgang mit Variationen bei der Eingabe über das Steuerkreuz

Nutzer von TV-Geräten haben möglicherweise mehr als einen Controllertyp, den sie mit ihrem Fernseher verwenden. Ein Nutzer kann beispielsweise einen Controller mit Steuerkreuz, eine Zeigerfernbedienung oder einen Gamecontroller haben. Die von einem Controller bereitgestellten Tastencodes, wenn er für Steuerkreuz-Funktionen verwendet wird, können sich von den Tastencodes unterscheiden, die von einem einfachen Steuerkreuz gesendet werden.

Berücksichtige die verschiedenen Möglichkeiten der D-Pad-Eingabe, damit Nutzer deine App nicht mit einem anderen Controller bedienen müssen. Weitere Informationen zur Verarbeitung von Eingabevariationen findest du unter Eingaben über das Steuerkreuz verarbeiten.

Unterstützung von Pointer-Fernbedienungen

Einige Fernseher unterstützen Zeigerfernbedienungen wie Air Mice oder Fernbedienungen mit berührungsempfindlichen Richtungspads (Touchpads). Durch die Unterstützung von Zeigerfernbedienungen können Nutzer mit Ihrer App interagieren, indem sie auf kompatibler Hardware mit Point-and-Click-, Hover-, Wisch- und Drag-Gesten arbeiten. So wird die Bedienung flüssiger und die volle Steuerkreuz-Kompatibilität bleibt erhalten.

Unterstützung für Zeigerfernbedienung im Manifest deklarieren

Wenn Sie angeben möchten, dass Ihre App mit Zeiger- und Touch-Eingabe bedient werden kann, konfigurieren Sie das App-Manifest mit den Metadaten android.software.leanback.supports_touch, die auf true festgelegt sind:

<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" />
    <!-- Signal whether the app supports pointer remotes -->
    <meta-data
        android:name="android.software.leanback.supports_touch"
        android:value="true" />
    <application ...>
        ...
    </application>
</manifest>

Klick-, Mouseover- und Scroll-Interaktionen unterstützen

Wenn du Zeigerfernbedienungen unterstützt, müssen deine UI-Komponenten bei den folgenden Interaktionen angemessen auf Cursor- und Toucheingaben reagieren:

  • Klicken und Auswahl:Alle fokussierbaren und auswählbaren UI-Elemente müssen mit der Pointer-Fernbedienung angeklickt werden können. Das Verhalten muss dem der Auswahl mit dem Steuerkreuz (KEYCODE_DPAD_CENTER) entsprechen.
    • Jetpack Compose:Verwenden Sie die Modifikatoren Modifier.clickable() oder pointerInput. Weitere Informationen finden Sie unter Tippen und drücken.
    • Ansichten:Click-Events für Ansichten verarbeiten. Weitere Informationen finden Sie in der Übersicht über Eingabeereignisse.
  • Visuelle Hover-Zustände:Ein klarer visueller Hover-Effekt zeigt an, wenn sich der Mauszeiger über einem auswählbaren Element befindet.
  • Wischen und zügiges Wischen zum Scrollen:Das horizontale und vertikale Scrollen, das durch eine Wisch- oder zügige Wischgeste auf einer berührungsempfindlichen mittleren Steuerkreuztaste ausgelöst wird, muss bei allen scrollbaren Inhalten reibungslos funktionieren.
  • Scrollen per Drag-and-drop:Nutzer müssen in der Lage sein, in scrollbaren Containern vertikal (nach oben und unten) oder horizontal (nach links und rechts) zu scrollen, indem sie den Inhalt ziehen.
    • Jetpack Compose:Standardmäßige scrollbare Container unterstützen standardmäßig das Scrollen mit dem Mauszeiger und per Touch. Informationen zu benutzerdefinierten Implementierungen finden Sie unter Pointer input in Compose.
    • Ansichten:Standardmäßige scrollbare Ansichten unterstützen standardmäßig das Scrollen per Touch. Informationen zur benutzerdefinierten Eingabebehandlung finden Sie unter Touch and input.
  • Media-Wiedergabe – Scrubbing:Während der Media-Wiedergabe (z. B. bei TV-Sendungen und Filmen) müssen Nutzer mit der Fortschrittsanzeige interagieren können, indem sie darauf zeigen und klicken, um zu einem vergangenen oder zukünftigen Zeitstempel zu springen, sowie die Fortschrittsanzeige ziehen (Scrubbing), um zu einer bestimmten Zeit zu springen.

Schaltflächenereignisse verarbeiten

Wenn der Nutzer auf eine Taste auf einem Controller klickt, empfängt Ihre App ein Ereignis mit einem KeyEvent. Das beabsichtigte Verhalten für die Schaltfläche kann ein Media-Ereignis wie „Wiedergabe“, „Pause“ oder „Stopp“ oder ein TV-Ereignis wie „Auswahl“ oder „Navigation“ sein. Für eine gute Nutzererfahrung sollten Controller-Schaltflächen einheitlich belegt sein.

TV-UI-Ereignisse

Weisen Sie den Schaltflächen, 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

Media-Ereignisse

Wenn der Nutzer sich Medien ansieht, weisen Sie den Schaltflächen, die KeyEvent-Typen generieren, das Verhalten zu, das in der folgenden Tabelle beschrieben wird. Wenn Ihre App ein MediaSession steuert, verwenden Sie ein MediaControllerAdapter, um eine der in der Tabelle gezeigten MediaControllerCompat.TransportControls-Methoden aufzurufen. Die Auswahlbuttons fungieren in diesem Kontext als Wiedergabe- oder Pausentasten.

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

Für richtiges Verhalten des Buttons „Zurück“ sorgen

Der Button „Zurück“ darf niemals als Ein/Aus-Schalter fungieren. Verwenden Sie sie beispielsweise nicht, um ein Menü zu öffnen und zu schließen. Verwenden Sie sie nur, um im Breadcrumb-Stil durch die vorherigen Bildschirme des Players zurückzugehen.

Da mit der Zurück-Taste nur linear rückwärts navigiert wird, können Sie damit ein In-App-Menü verlassen, das über eine andere Taste geöffnet wurde, und zur App zurückkehren. Durch wiederholtes Drücken der Zurück-Taste muss der Nutzer schließlich immer zum Android TV-Startbildschirm gelangen. Beispiele: Gameplay > Pausenbildschirm des Spiels > 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 finden Sie unter Zurück- und Aufwärtsnavigation gestalten. Informationen zur Implementierung finden Sie unter Für richtige Rückwärtsnavigation sorgen.

Controller für Spiele verwenden

Wenn Sie Spiele für Android TV entwickeln, sollte das Steuerungsschema sowohl mit Standard-TV-Fernbedienungen als auch mit speziellen Controllern funktionieren.

Steuerung mit Steuerkreuz unterstützen

Plane dein Steuerungsschema um eine Steuerung mit dem Steuerkreuz herum, 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 die Steuerung des eigentlichen Spiels, sondern auch für die Navigation in Menüs und Anzeigen. Achte daher darauf, dass dein Android TV-Spiel nicht auf eine Touch-Oberfläche verweist, z. B. mit Formulierungen wie „Tippen Sie hier, um fortzufahren“.

Wie du die Interaktion des Spielers mit dem Controller gestaltest, kann entscheidend für eine gute Nutzerfreundlichkeit sein. Folgende Best Practices können dabei hilfreich sein:

  • Controller-Anforderungen im Voraus kommunizieren:Verwenden Sie die Google Play-Beschreibung, um dem Spieler alle Erwartungen an Controller mitzuteilen. Wenn sich ein Spiel besser mit einem Gamepad mit Joystick als mit einem Gamepad mit Steuerkreuz spielen lässt, sollten Sie das deutlich machen. Wenn ein Spieler einen ungeeigneten Controller für ein Spiel verwendet, kann das zu einem schlechten Spielerlebnis führen und er gibt Ihrem Spiel möglicherweise eine schlechte Bewertung.
  • Einheitliche Tastenbelegung verwenden:Eine intuitive Tastenbelegung ist entscheidend für eine gute Nutzererfahrung. Halten Sie sich beispielsweise an die üblichen Gepflogenheiten, indem Sie die A-Taste zum Akzeptieren und die B-Taste zum Abbrechen verwenden. Sie können auch Flexibilität bieten, indem Sie dem Nutzer erlauben, Tasten neu zu belegen. Weitere Informationen zur Tastenbelegung finden Sie unter Controller-Aktionen verarbeiten.
  • Controllerfunktionen erkennen und entsprechend anpassen:Frage den Controller nach seinen Funktionen, um die Übereinstimmung zwischen Controller und Spiel zu optimieren. Vielleicht soll ein Spieler ein Objekt steuern, indem er den Controller in der Luft schwenkt. Wenn der Controller eines Spielers jedoch keine Hardware für Beschleunigungsmesser und Gyroskop hat, funktioniert das Schwenken 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 Controllerfunktionen finden Sie unter Controller über Android-Versionen hinweg 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 Schaltflächen abhängt.

Mehrere Controller verarbeiten

Wenn mehrere Spieler ein Spiel mit jeweils einem eigenen Controller spielen, ist es wichtig, jedes Spieler-Controller-Paar zuzuordnen. Informationen zur Implementierung der Controller-Nummer finden Sie unter getControllerNumber().

Umgang mit getrennten Controllern

Wenn ein Controller während des Spiels getrennt wird, pausieren Sie das Spiel und zeigen Sie ein Dialogfeld an, in dem der Spieler aufgefordert wird, den Controller wieder anzuschließen.

Bieten Sie im Dialogfeld auch Tipps zur Fehlerbehebung an. Weise den Spieler beispielsweise an, „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 anzeigen

Wenn Ihr Spiel eine visuelle Anleitung für die Steuerung bietet, verwenden Sie ein Controller-Bild ohne Branding und zeigen Sie nur mit Android kompatible Tasten.

Beispielbilder eines Android-kompatiblen Controllers finden Sie in der Android TV-Gamepad-Vorlage (ZIP). Sie 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.

**Abbildung 1.** Beispiel für Controller-Anleitung mit der Android TV-Gamepad-Vorlage.