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

Les appareils TV nécessitent un appareil matériel 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. De plus, votre application peut avoir besoin de gérer les manettes qui se déconnectent et la saisie à partir de plusieurs types de manettes.

Ce guide explique comment gérer les manettes pour les appareils TV.

Commandes minimales du pavé directionnel

La manette par défaut pour un appareil TV 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électionner, 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 de permettre aux joueurs de jouer uniquement avec ces commandes du pavé directionnel. Sinon, avertissez l'utilisateur qu' une manette est requise et permettez-lui de quitter votre jeu correctement à l'aide du pavé directionnel.

Pour en savoir plus sur la navigation avec des pavés directionnels pour appareils TV, consultez Navigation TV.

Gérer les déconnexions de la manette

Les manettes pour TV sont souvent des appareils Bluetooth qui peuvent tenter d'économiser de l'énergie en passant périodiquement en mode veille et en se déconnectant de l'appareil TV. 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 circonstances suivantes :

  • Pendant la lecture d'une vidéo de plusieurs minutes, un pavé directionnel ou une manette de jeu peut passer en mode veille, se déconnecter de l'appareil TV et se reconnecter ultérieurement.
  • Pendant une partie, un nouveau joueur peut rejoindre le jeu à l'aide d'une manette de jeu qui n'est pas déjà connectée.
  • Pendant une partie, un joueur peut quitter le jeu et déconnecter une manette de jeu.

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 d'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 configuration permet à l'application de continuer à s'exécuter lors d'un événement de reconnexion , plutôt que 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 d'appareils TV peuvent disposer de plusieurs types de manettes qu'ils utilisent avec leur téléviseur. Par exemple, un utilisateur peut disposer d'une manette de base avec pavé directionnel et d'une manette de jeu. Les codes de touche fournis par une manette de jeu lorsqu'elle est utilisée pour les fonctions du pavé directionnel peuvent varier de ceux envoyés par un pavé directionnel de base.

Gérez les variations de saisie du pavé directionnel afin que l'utilisateur n'ait pas à changer de manette pour utiliser votre application. Pour en savoir plus sur la gestion des variations de saisie, consultez Traiter la saisie du 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 prévu pour le bouton peut être un événement multimédia, comme la lecture, la pause ou l'arrêt, ou un événement de type TV, 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 de l'interface utilisateur TV

Attribuez un comportement d'interface utilisateur TV 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 un 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 une 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 agissent comme des 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, KEYCODE_NUMPAD_ENTER pause()Pause
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 une MediaSession, ne remplacez pas la gestion des boutons spécifiques aux contenus multimédias, tels que KEYCODE_MEDIA_PLAY ou KEYCODE_MEDIA_PAUSE. Le système déclenche automatiquement la méthode appropriée MediaSession.Callback.

Fournir un comportement approprié pour le bouton "Retour"

Le bouton "Retour" ne doit jamais servir de bouton bascule. Par exemple, ne l'utilisez pas pour ouvrir et fermer un menu. Utilisez-le uniquement pour revenir en arrière, comme un fil d'Ariane, dans les écrans précédents sur lesquels le joueur s'est rendu.

Étant donné que le bouton "Retour" n'effectue qu'une navigation linéaire vers l'arrière, vous pouvez l'utiliser pour quitter un menu intégré à l'application ouvert par un autre bouton et revenir à l'application. Appuyer plusieurs fois de suite sur le bouton "Retour" doit toujours finir par afficher l'écran d'accueil d'Android TV. Par exemple : gameplay > écran de pause du jeu > écran principal du jeu > écran d'accueil d'Android TV ou lecture d'un programme TV > écran principal de l'appli TV > écran d'accueil d'Android TV.

Pour en savoir plus sur la conception de la navigation, consultez Concevoir la navigation "Retour" et "Haut". Pour en savoir plus sur l'implémentation, consultez Fournir une navigation vers l'arrière efficace.

Gérer les manettes pour les jeux

Compatibilité avec les commandes du pavé directionnel

Planifiez votre schéma de commande autour d'une commande de pavé directionnel, car cet ensemble de commandes est celui par défaut pour les appareils Android TV. Le joueur doit pouvoir utiliser un pavé directionnel pour tous les aspects du jeu, non seulement pour contrôler le gameplay de base, mais aussi pour naviguer dans les menus et les annonces. Pour cette raison, assurez-vous que votre jeu Android TV ne fait pas référence à une interface tactile avec un texte tel que "Appuyez ici pour continuer".

La façon dont vous façonnez l'interaction du joueur avec la manette peut être essentielle pour offrir une excellente expérience utilisateur. Voici quelques bonnes pratiques :

  • Communiquez les exigences de la manette à l'avance : utilisez votre description Google Play pour communiquer au joueur toutes les attentes concernant les manettes. Si un jeu est plus adapté à une manette avec un joystick qu'à une manette avec uniquement un pavé directionnel, indiquez-le clairement. Un joueur qui utilise une manette mal adaptée à un jeu peut avoir une mauvaise expérience et donner une mauvaise note à votre jeu.
  • Utilisez un mappage de boutons cohérent : un mappage de boutons intuitif est essentiel pour une bonne expérience utilisateur. Par exemple, respectez les conventions acceptées en utilisant le bouton A pour accepter et le bouton B pour annuler. Vous pouvez également offrir une flexibilité sous la forme d'une remappabilité. Pour en savoir plus sur le mappage des boutons, consultez Gérer les actions de la manette.
  • Détectez les fonctionnalités de la manette et ajustez-les en conséquence : interrogez la manette sur ses fonctionnalités pour optimiser la correspondance entre la manette et le jeu. Par exemple, vous pouvez avoir l'intention qu'un joueur dirige un objet en agitant la manette dans l'air, mais si la manette d'un joueur ne dispose pas d'un accéléromètre et d'un gyroscope, l'agitation ne fonctionne pas. Interrogez la manette et, si la détection de mouvement n'est pas prise en charge, passez à un autre schéma de commande disponible. Pour en savoir plus sur l'interrogation des fonctionnalités de la manette, consultez Compatibilité des manettes sur différentes versions d'Android.

Utiliser les boutons appropriés

Toutes les manettes de jeu ne sont pas dotées des 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-manette. Pour savoir comment implémenter l'identification du numéro de la manette, consultez getControllerNumber().

Gérer les déconnexions de la manette

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

Proposez également des conseils de dépannage dans la boîte de dialogue. Par exemple, demandez au joueur de "vérifier sa connexion Bluetooth". Pour en savoir plus sur l'implémentation de la compatibilité avec les périphériques de saisie, consultez Gérer les actions de la manette et la présentation de Bluetooth.

Afficher les instructions de la manette

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

Pour obtenir des exemples d'images d'une manette compatible avec Android, téléchargez le modèle de manette Android TV (ZIP). Il inclut une manette blanche sur fond noir et une manette noire sur fond blanc (illustrées à la figure 1) au format PNG et au format Adobe® Illustrator®.

Figure 1. Exemple d'instructions de manette utilisant le modèle de manette Android TV.