Navigation avec le pavé directionnel sur Android TV
La télécommande d'Android TV est dotée d'un pavé directionnel qui envoie des commandes qui arrivent sous forme d'événements de touche au niveau de dispatchKeyEvent(KeyEvent) de votre Activity. Ils doivent être délégués à PlayerView :
Kotlin
override fun dispatchKeyEvent(event: KeyEvent?): Boolean { return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event) }
Java
@Override public boolean dispatchKeyEvent(KeyEvent event) { return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); }
Il est important de demander la sélection pour le PlayerView afin de parcourir les commandes de lecture et d'ignorer les annonces. Envisagez de demander la sélection dans onCreate de Activity :
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // ... playerView.requestFocus() // ... }
Java
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... playerView.requestFocus(); // ... }
Si vous utilisez Compose sur Android TV, vous devez rendre AndroidView sélectionnable et déléguer l'événement en transmettant le paramètre de modificateur dans AndroidView en conséquence :
AndroidView( modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) }, factory = { playerView }, )
Utiliser le composable Player
Si vous utilisez le composable Player de la bibliothèque media3-ui-compose-material3, la navigation par pavé directionnel est compatible par défaut. Les composants Player et PlayerDefaults disposent d'une instance FocusRequester automatique qui parcourt les composants avec le pavé directionnel. Vous n'avez donc pas besoin de code supplémentaire ni de Modifier.focusRequester pour gérer les événements de sélection et de touche :
Les PlayerDefaults sont disposés dans des emplacements en haut, au centre et en bas pour que la navigation avec le pavé directionnel soit intuitive. Pour toute personnalisation et tout remplacement de ces emplacements, veillez à fournir un composant facilement navigable. Notez que la plupart des composants Compose, tels que Slider ou Row contenant des boutons, gèrent le curseur de manière native.