Android TV

Navegación con el pad direccional en Android TV

El control remoto de Android TV tiene un control de pad direccional que envía comandos que llegan como eventos de tecla a dispatchKeyEvent(KeyEvent) de tu Activity. Estos deben delegarse a 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);
}

Solicitar el enfoque para PlayerView es importante para navegar por los controles de reproducción y omitir anuncios. Considera solicitar el enfoque en 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 usas Compose en Android TV, debes hacer que AndroidView se pueda enfocar y delegar el evento pasando el parámetro modificador a la AndroidView según corresponda:

AndroidView(
  modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) },
  factory = { playerView },
)

Usa el elemento componible Player

Si usas el elemento componible Player de la biblioteca media3-ui-compose-material3, la navegación con el pad direccional se admite de forma predeterminada. Los componentes Player y PlayerDefaults tienen una instancia FocusRequester automática que recorre los componentes con el pad direccional, por lo que no necesitas código adicional ni Modifier.focusRequester para controlar el enfoque y los eventos de tecla:

Los PlayerDefaults se organizan en ranuras superior, central e inferior para que la navegación con el pad direccional sea intuitiva. Para cualquier personalización y anulación de esas ranuras, asegúrate de proporcionar un componente que se pueda navegar bien. Ten en cuenta que la mayoría de los componentes de Compose, como Slider o Row que contienen botones, administran el enfoque de inmediato.