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

Les téléviseurs nécessitent un dispositif matériel secondaire pour interagir avec les applications : une télécommande ou une manette de jeu de base. Par conséquent, votre application doit être compatible avec le pavé directionnel. En outre, votre application peut avoir besoin de gérer les manettes hors connexion et les entrées provenant de plusieurs types de manettes.

Ce guide décrit les exigences liées à l'utilisation des manettes pour les téléviseurs.

Commandes minimales du pavé directionnel

La manette par défaut d'un téléviseur est un pavé directionnel. En général, votre application doit être utilisable à partir d'une télécommande ne contenant 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 de proposer une expérience de jeu avec uniquement ces commandes du pavé directionnel. Sinon, avertissez l'utilisateur qu'une manette est requise et laissez-le quitter le jeu en douceur à l'aide du pavé directionnel.

Pour en savoir plus sur la navigation avec des manettes de pavé directionnel pour les téléviseurs, consultez la section Navigation TV.

Gérer les déconnexions de la manette

Les manettes de téléviseur 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 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 du téléviseur, puis se reconnecter plus tard.
  • Pendant le jeu, un nouveau joueur peut rejoindre le jeu à l'aide d'une manette de jeu qui n'est pas déjà connectée.
  • Pendant le jeu, un joueur peut quitter le jeu et déconnecter une manette de jeu.

Toutes les activités dans les applications TV qui sont sujettes à des événements de déconnexion et de reconnexion doivent être configurées pour gérer les événements de reconnexion dans le fichier manifeste de l'application. L'exemple de code suivant montre comment autoriser une activité à 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>

Ce changement de 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'un 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 de saisie au pavé directionnel afin que l'utilisateur n'ait pas à changer de manette pour faire fonctionner votre application. Pour en savoir plus sur la gestion des variations d'entrée, consultez Traiter l'entrée 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 une KeyEvent. Le comportement du bouton peut être un événement multimédia, tel que lecture, pause ou arrêt, ou de type TV, comme une sélection ou une 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 de l'UI 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 et KEYCODE_NUMPAD_ENTERSélection
KEYCODE_DPAD_UP, KEYCODE_DPAD_DOWN, KEYCODE_DPAD_LEFT et KEYCODE_DPAD_RIGHTNavigation

Événements multimédias

Lorsque l'utilisateur regarde du contenu multimédia, attribuez le 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 font office de boutons de lecture ou de pause dans ce contexte.

KeyEventappel TransportControlsComportement
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER et 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 et AXIS_THROTTLEfastForward()Avance rapide
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER et AXIS_BRAKErewind()Retour arrière
N/Astop()Arrêter

Remarque:Lorsque vous utilisez un MediaSession, n'ignorez pas le traitement 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 MediaSession.Callback appropriée.

Assurez-vous que le bouton "Retour" fonctionne correctement.

Le bouton "Retour" ne doit jamais faire office d'activation/désactivation. Par exemple, ne l'utilisez pas à la fois pour ouvrir et fermer un menu. N'utilisez cette option 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 actif.

É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. Si vous appuyez de manière consécutive sur le bouton "Retour", vous devez toujours revenir à l'écran d'accueil d'Android TV. Par exemple: lecture de jeu > Écran de mise en pause du jeu > Écran principal du jeu > Écran d'accueil d'Android TV ou lecture de série TV > Écran principal de l'application TV > Écran d'accueil d'Android TV.

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

Gérer les manettes de jeu

Prendre en charge les commandes du pavé directionnel

Planifiez votre schéma de commande autour d'une commande à pavé directionnel, car il s'agit du paramètre par défaut pour les appareils Android TV. Le joueur doit être en mesure d'utiliser un pavé directionnel pour tous les aspects du jeu, non seulement pour contrôler le gameplay de base, mais aussi pour parcourir les menus et les annonces. Par conséquent, assurez-vous que votre jeu Android TV ne fait pas référence à une interface tactile avec un langage tel que "Appuyez ici pour continuer".

La manière dont vous façonnez l'interaction du joueur avec la manette peut être essentielle pour une expérience utilisateur de qualité. Voici quelques bonnes pratiques :

  • Communiquez dès le départ les exigences concernant les manettes:utilisez votre description Google Play pour communiquer au joueur vos attentes concernant les manettes. Si un jeu est mieux adapté à une manette de jeu avec un joystick qu'à un jeu doté d'un seul pavé directionnel, indiquez-le clairement. Un joueur qui utilise une manette inappropriée pour 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 critères de douane acceptés en utilisant le bouton A pour accepter et le bouton B pour annuler. Vous pouvez également offrir une certaine flexibilité sous la forme du 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 effectuez les ajustements nécessaires:interrogez la manette sur ses capacités pour optimiser la correspondance entre la manette et le jeu. Par exemple, vous pouvez souhaiter qu'un joueur oriente un objet en agitant la manette en l'air, mais si celle-ci est dépourvue d'accéléromètre et de gyroscope, cela ne fonctionnera pas. Interrogez le contrôleur et, si la détection des mouvements n'est pas disponible, passez à un autre schéma de contrôle disponible. Pour en savoir plus sur l'interrogation des fonctionnalités de contrôleur, consultez Compatibilité avec les manettes sur 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/manette. Pour en savoir plus sur l'implémentation de 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 au milieu du jeu, mettez le jeu en pause et affichez une boîte de dialogue invitant le joueur déconnecté à reconnecter sa manette.

Fournissez également des conseils de dépannage dans la boîte de dialogue. Par exemple, demandez au lecteur de "vérifier votre connexion Bluetooth". Pour en savoir plus sur la mise en œuvre de la compatibilité avec les périphériques d'entrée, consultez 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 pour les commandes 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). Il comprend un contrôleur blanc sur un arrière-plan noir et un contrôleur noir sur un arrière-plan blanc (voir la figure 1) aux formats PNG et Adobe® Illustrator®.

Figure 1 : Exemple d'instructions pour la manette à l'aide du modèle de manette de jeu Android TV