Gérer les télécommandes de téléviseur

Les téléviseurs nécessitent un appareil secondaire pour interagir avec les applications (une télécommande de base ou une manette de jeu). Par conséquent, votre application doit être compatible avec la saisie à l'aide d'un pavé directionnel. En outre, votre application peut avoir besoin de gérer les manettes qui passent hors connexion et les entrées provenant de plusieurs types de manettes.

Ce guide décrit les conditions requises pour gérer les manettes des téléviseurs.

Commandes minimales du pavé directionnel

La manette par défaut des téléviseurs est un pavé directionnel. En général, votre application doit pouvoir être utilisée à partir d'une télécommande qui ne comporte que les boutons Haut, Bas, Gauche, Droite, Sélection, Retour et Accueil. Si votre application est un jeu qui nécessite généralement une manette de jeu avec des commandes supplémentaires, essayez d'utiliser uniquement ces commandes pour le jeu. Sinon, avertissez l'utilisateur qu'une manette est requise et laissez-le quitter votre jeu en douceur à l'aide du pavé directionnel.

Pour en savoir plus sur la gestion de la navigation avec la manette avec pavé directionnel sur les téléviseurs, consultez Navigation TV.

Gérer les déconnexions de la manette

Les manettes des téléviseurs sont souvent des appareils Bluetooth qui peuvent tenter d'économiser de l'énergie en passant régulièrement en mode veille et en se déconnectant du téléviseur. Cela signifie qu'une application peut être interrompue ou redémarrée si elle n'est pas configurée pour gérer ces événements de reconnexion. Ces événements peuvent se produire dans les cas suivants:

  • Lorsqu'une vidéo de plusieurs minutes est lue, un pavé directionnel ou une manette de jeu peut passer en mode veille, se déconnecter du téléviseur, puis se reconnecter plus tard.
  • Pendant une partie, un nouveau joueur peut rejoindre le jeu à l'aide d'une manette qui n'est pas déjà connectée.
  • Pendant une partie, un joueur peut quitter le jeu et déconnecter une manette.

Toute activité d'application TV soumise à des événements de déconnexion et de reconnexion doit être configurée pour gérer les événements de reconnexion dans le fichier manifeste de l'application. L'exemple de code suivant montre comment activer une activité pour gérer les modifications de configuration, y compris la connexion, la déconnexion ou la reconnexion d'un clavier ou d'un appareil de navigation:

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

Cette modification de la configuration permet à l'application de continuer à s'exécuter via un événement de reconnexion au lieu d'être redémarrée par le framework Android, ce qui n'est pas une bonne expérience utilisateur.

Gérer les variations de saisie du pavé directionnel

Les utilisateurs de téléviseurs peuvent utiliser plusieurs types de manettes avec leur téléviseur. Par exemple, un utilisateur peut disposer à la fois d'une manette de pavé directionnel de base et d'une manette de jeu. Les codes de touche fournis par une manette de jeu lorsqu'elle est utilisée pour les fonctions d'un pavé directionnel peuvent différer de ceux envoyés par un pavé directionnel de base.

Gérez les variations d'entrée du pavé directionnel afin que l'utilisateur n'ait pas à changer de contrôleur pour faire fonctionner votre application. Pour en savoir plus sur la gestion des variations d'entrée, consultez Traiter la saisie sur le pavé directionnel.

Gérer les événements de bouton

Lorsque l'utilisateur clique sur un bouton d'une manette, votre application reçoit un événement avec un KeyEvent. Le comportement attendu du bouton peut être un événement multimédia, comme la lecture, la mise en pause ou l'arrêt, ou un événement de type téléviseur, comme la sélection ou la navigation. Pour offrir une bonne expérience utilisateur, attribuez un comportement cohérent aux boutons de la manette.

Événements d'UI TV

Attribuez le comportement d'UI du téléviseur aux boutons qui génèrent des types KeyEvent, comme indiqué dans le tableau suivant:

KeyEventComportement
KEYCODE_BUTTON_B, KEYCODE_BACKRetour
KEYCODE_BUTTON_SELECT, KEYCODE_BUTTON_A, KEYCODE_ENTER, KEYCODE_DPAD_CENTER, KEYCODE_NUMPAD_ENTERSélection
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT, KEYCODE_DPAD_RIGHTNavigation

Événements multimédias

Lorsque l'utilisateur regarde du contenu multimédia, attribuez un comportement aux boutons qui génèrent des types KeyEvent, comme indiqué dans le tableau suivant. Si votre application contrôle un MediaSession, utilisez un MediaControllerAdapter pour appeler l'une des méthodes MediaControllerCompat.TransportControls indiquées dans le tableau. Notez que les boutons de sélection servent de boutons de lecture ou de pause dans ce contexte.

KeyEventAppel TransportControlsComportement
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER play()Lire
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER et KEYCODE_NUMPAD_ENTER pause()Suspendre
BUTTON_R1skipToNext()Passer au suivant
BUTTON_L1skipToPrevious()Passer au contenu précédent
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLEfastForward()Avance rapide
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKErewind()Retour arrière
N/Astop()Arrêter

Remarque:Lorsque vous utilisez un MediaSession, ne remplacez pas la gestion des boutons spécifiques au contenu multimédia, tels que KEYCODE_MEDIA_PLAY ou KEYCODE_MEDIA_PAUSE. Le système déclenche automatiquement la méthode MediaSession.Callback appropriée.

Indiquer un comportement approprié pour le bouton "Retour"

Le bouton "Retour" ne doit jamais faire office de bouton d'activation/de désactivation. Par exemple, ne l'utilisez pas à la fois pour ouvrir et fermer un menu. Ne l'utilisez que pour revenir en arrière, sous la forme d'un fil d'Ariane, dans les écrans précédents sur lesquels le lecteur était passé.

Étant donné que le bouton "Retour" n'effectue que la navigation linéaire vers l'arrière, vous pouvez l'utiliser pour laisser un menu intégré ouvert par un autre bouton et revenir à l'application. Le fait d'appuyer de manière consécutive sur le bouton "Retour" doit toujours mener à l'écran d'accueil d'Android TV. Par exemple: Lecture > Écran de pause du jeu > Écran principal du jeu > Écran d'accueil Android TV ou lecture d'une série TV > Écran principal de l'appli TV > Écran d'accueil Android TV.

Pour en savoir plus sur la conception pour la navigation, consultez la page Concevoir la navigation vers l'arrière et vers le haut. Pour en savoir plus sur l'implémentation, consultez la section Fournir une navigation vers l'arrière appropriée.

Gérer les manettes pour les jeux

Prendre en charge les commandes du pavé directionnel

Planifiez votre schéma de contrôle autour d'un pavé directionnel, car cet ensemble de commandes est défini par défaut sur les appareils Android TV. Le joueur doit pouvoir utiliser un pavé directionnel pour tous les aspects du jeu (contrôler la jouabilité, mais également naviguer dans les menus et les annonces). Assurez-vous donc que votre jeu Android TV ne fait pas référence à une interface tactile avec un langage tel que "Tap here to continue" (Appuyez ici pour continuer).

La façon dont vous façonnez l'interaction du joueur avec la manette peut s'avérer essentielle pour garantir une expérience utilisateur optimale. Tenez compte des bonnes pratiques suivantes:

  • Communiquez dès le départ les exigences concernant la manette:utilisez votre description Google Play pour indiquer au joueur ses attentes concernant les manettes. Si un jeu convient mieux à une manette de jeu avec un joystick qu'à un jeu doté d'un pavé directionnel, indiquez-le clairement. Un joueur qui utilise une manette peu adaptée à un jeu peut avoir une mauvaise expérience et donner une mauvaise note à votre jeu.
  • Utilisez un mappage cohérent des boutons:un mappage intuitif des boutons est essentiel pour une bonne expérience utilisateur. Par exemple, respectez les formalités douanières acceptées en utilisant le bouton A pour accepter et le bouton B pour annuler. Vous pouvez également offrir une certaine flexibilité sous la forme de remappabilités. Pour en savoir plus sur le mappage des boutons, consultez la section Gérer les actions de la manette.
  • Détectez les fonctionnalités de la manette et effectuez les ajustements nécessaires:interrogez la manette sur ses fonctionnalités pour optimiser la correspondance entre la manette et le jeu. Par exemple, vous voulez peut-être qu'un joueur pilote un objet en agitant la télécommande en l'air, mais que la manette n'est pas équipée d'un accéléromètre ou d'un gyroscope, cette opération ne fonctionne pas. Interrogez le contrôleur et, si la détection des mouvements n'est pas disponible, passez à un autre schéma de commandes disponible. Pour en savoir plus sur l'interrogation des fonctionnalités des contrôleurs, consultez la section Prendre en charge les contrôleurs sur toutes les versions d'Android.

Utiliser les boutons appropriés

Les manettes de jeu ne disposent pas toutes de boutons "Démarrer", "Rechercher" ou "Menu". Assurez-vous que votre interface utilisateur ne dépend pas de l'utilisation de ces boutons.

Gérer plusieurs manettes

Lorsque plusieurs joueurs jouent à un jeu, chacun avec sa propre manette, il est important de mapper chaque paire joueur/contrôleur. Pour découvrir comment mettre en œuvre l'identification du numéro de contrôleur, consultez getControllerNumber().

Gérer les déconnexions de la manette

Lorsqu'une manette est déconnectée en cours de jeu, mettez le jeu en pause et affichez une boîte de dialogue invitant le joueur déconnecté à reconnecter sa manette.

Vous trouverez également des conseils de dépannage dans la boîte de dialogue. Par exemple, dites au joueur de "Vérifiez votre connexion Bluetooth". Pour en savoir plus sur la mise en œuvre de la compatibilité avec les périphériques d'entrée, consultez la section Gérer les actions de la manette et la présentation du Bluetooth.

Afficher les instructions concernant la manette

Si votre jeu fournit des instructions visuelles de contrôle de jeu, utilisez une image de manette sans marque et n'incluez que des boutons compatibles avec Android.

Pour obtenir des exemples d'images d'une manette compatible avec Android, téléchargez le modèle de manette de jeu Android TV (ZIP). Elle comprend un contrôleur blanc sur fond noir et un contrôleur noir sur fond blanc (comme illustré dans la figure 1) au format PNG et Adobe® Illustrator®.

Figure 1 : Exemples d'instructions concernant la manette utilisant le modèle de manette de jeu Android TV