Android TV

Steuerkreuznavigation auf Android TV

Die Fernbedienung von Android TV hat ein Steuerkreuz, das Befehle sendet, die als Schlüsselereignisse bei dispatchKeyEvent(KeyEvent) deiner Activity ankommen. Diese müssen an die PlayerView delegiert werden:

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);
}

Das Anfordern des Fokus für das PlayerView ist wichtig, um die Wiedergabesteuerung zu bedienen und Anzeigen zu überspringen. Sie können den Fokus in onCreate der Activity anfordern:

Kotlin

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

Java

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

Wenn Sie Compose auf Android TV verwenden, müssen Sie AndroidView fokussierbar machen und das Ereignis delegieren, indem Sie den Modifikatorparameter entsprechend an AndroidView übergeben:

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

Das Compose-Element Player verwenden

Wenn du das Compose-Element Player aus der media3-ui-compose-material3-Bibliothek verwendest, wird die Navigation per Steuerkreuz standardmäßig unterstützt. Die Komponenten Player und PlayerDefaults haben eine automatische FocusRequester-Instanz, die die Komponenten mit dem Steuerkreuz durchläuft. Sie benötigen also keinen zusätzlichen Code oder Modifier.focusRequester, um Fokus- und Schlüsselereignisse zu verarbeiten:

Die PlayerDefaults sind in oberen, mittleren und unteren Slots angeordnet, damit die Navigation mit dem Steuerkreuz intuitiv ist. Wenn Sie diese Slots anpassen und überschreiben, müssen Sie eine gut navigierbare Komponente bereitstellen. Die meisten Compose-Komponenten wie Slider oder Row mit Schaltflächen verwalten den Fokus standardmäßig.