Android TV

Navigasi D-pad di Android TV

Remote control Android TV memiliki kontrol d-pad yang mengirim perintah yang tiba sebagai peristiwa tombol di dispatchKeyEvent(KeyEvent) Activity Anda. Ini harus didelegasikan kepada 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);
}

Meminta fokus untuk PlayerView penting untuk menavigasi kontrol pemutaran dan melewati iklan. Pertimbangkan untuk meminta fokus di onCreate dari 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();
  // ...
}

Jika Anda menggunakan Compose di Android TV, Anda harus membuat AndroidView dapat difokuskan dan mendelegasikan peristiwa dengan meneruskan parameter pengubah ke AndroidView dengan tepat:

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

Menggunakan composable Player

Jika Anda menggunakan composable Player dari library media3-ui-compose-material3, navigasi D-pad didukung secara default. Komponen Player dan PlayerDefaults memiliki instance FocusRequester otomatis yang melakukan traversal komponen dengan D-pad, sehingga Anda tidak memerlukan kode tambahan atau Modifier.focusRequester untuk menangani peristiwa fokus dan tombol:

PlayerDefaults disusun di slot atas, tengah, dan bawah sehingga navigasi D-pad terasa intuitif. Untuk penyesuaian dan penggantian pada slot tersebut, pastikan Anda menyediakan komponen yang mudah dinavigasi. Perhatikan bahwa sebagian besar komponen Compose, seperti Slider atau Row yang berisi tombol, mengelola fokus secara langsung.