Android TV

Навигация с помощью кнопок направления на Android TV

На пульте ДУ Android TV есть D-pad, который отправляет команды, поступающие в виде ключевых событий в dispatchKeyEvent(KeyEvent) вашего Activity. Эти задачи необходимо делегировать 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);
}

Запрос фокуса для PlayerView важен для навигации по элементам управления воспроизведением и пропуска рекламы. Попробуйте запросить фокус в методе onCreate класса 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();
  // ...
}

Если вы используете Compose на Android TV, вам нужно сделать AndroidView фокусируемым и делегировать событие, передав параметр модификатора в AndroidView:

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

Используйте composable-функцию Player

Если вы используете composable-функцию Player из библиотеки media3-ui-compose-material3, навигация с помощью d-pad поддерживается по умолчанию. Компоненты Player и PlayerDefaults имеют автоматический экземпляр FocusRequester, который перемещается по компонентам с помощью d-pad, поэтому вам не нужен дополнительный код или Modifier.focusRequester для обработки фокуса и ключевых событий:

PlayerDefaults расположены вверху, в центре и внизу, поэтому навигация с помощью d-pad интуитивно понятна. Если вы настраиваете или переопределяете эти слоты, убедитесь, что компонент удобен для навигации. Обратите внимание, что большинство компонентов Compose, например Slider или Row, содержащие кнопки, управляют фокусом по умолчанию.