Android TV

Android TV의 D패드 탐색

Android TV의 리모컨에는 ActivitydispatchKeyEvent(KeyEvent)에서 키 이벤트로 도착하는 명령어를 전송하는 D패드 컨트롤이 있습니다. 이러한 컨트롤은 PlayerView에 위임되어야 합니다.

Kotlin

override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
  return playerView.dispatchKeyEvent(event!!) || super.dispatchKeyEvent(event)
}

자바

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  return playerView.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
}

PlayerView에 포커스를 요청하는 것은 재생 컨트롤을 탐색하고 광고를 건너뛰는 데 중요합니다. ActivityonCreate에서 포커스를 요청하는 것이 좋습니다.

Kotlin

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

자바

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

Android TV에서 Compose를 사용하는 경우 AndroidView 포커스 가능하게 만들고 modifier 매개변수를 AndroidView에 전달하여 이벤트를 위임해야 합니다.

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

Player 컴포저블 사용

Player 컴포저블을 media3-ui-compose-material3 라이브러리에서 사용하는 경우 D패드 탐색이 기본적으로 지원됩니다. PlayerPlayerDefaults 구성요소에는 D패드로 구성요소를 트래버스하는 자동 FocusRequester 인스턴스가 있으므로 포커스 및 키 이벤트를 처리하기 위해 추가 코드 또는 Modifier.focusRequester가 필요하지 않습니다.

PlayerDefaults는 상단, 중앙, 하단 슬롯에 정렬되어 D패드 탐색이 직관적으로 느껴집니다. 이러한 슬롯을 맞춤설정하고 재정의하려면 탐색하기 쉬운 구성요소를 제공해야 합니다. 버튼이 포함된 Slider 또는 Row와 같은 대부분의 Compose 구성요소는 기본적으로 포커스를 관리합니다.