Android TV

在 Android TV 上使用 D-Pad 導覽

Android TV 遙控器具有 D-pad 控制項,可傳送指令,並以按鍵事件的形式傳送至 ActivitydispatchKeyEvent(KeyEvent)。請將這些項目委派給「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 的焦點對於瀏覽播放控制項和略過廣告非常重要。請考慮在 onCreateActivity 中要求焦點:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView.requestFocus()
  // ...
}

Java

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // ...
  playerView.requestFocus();
  // ...
}

如果您在 Android TV 上使用 Compose,則需要將 AndroidView 設為可聚焦,並將修飾符參數傳遞至 AndroidView,據此委派事件:

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

使用 Player 可組合函式

如果您使用 media3-ui-compose-material3 程式庫中的 Player 可組合函式,系統預設會支援 D-Pad 導覽。PlayerPlayerDefaults 元件具有自動 FocusRequester 執行個體,可透過 D-pad 遍歷元件,因此您不需要額外程式碼或 Modifier.focusRequester 來處理焦點和按鍵事件:

PlayerDefaults 會排列在頂端、中央和底部的插槽中,讓 D-Pad 導覽操作起來更直覺。如要自訂或覆寫這些插槽,請務必提供易於導覽的元件。請注意,大多數 Compose 元件 (例如包含按鈕的 SliderRow) 都會直接管理焦點。