Android TV의 D패드 탐색
Android TV의 리모컨에는 Activity의 dispatchKeyEvent(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에 포커스를 요청하는 것은 재생 컨트롤을 탐색하고 광고를 건너뛰는 데 중요합니다. Activity의 onCreate에서 포커스를 요청하는 것이 좋습니다.
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에 포커스를 지정할 수 있도록 하고 다음과 같이 수정자 매개변수를 AndroidView에 전달하여 이벤트를 위임해야 합니다.
AndroidView( modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) }, factory = { playerView }, )
Player 컴포저블 사용
media3-ui-compose-material3 라이브러리의 Player 컴포저블을 사용하면 D패드 탐색이 기본적으로 지원됩니다. Player 및 PlayerDefaults 구성요소에는 D패드로 구성요소를 순회하는 자동 FocusRequester 인스턴스가 있으므로 포커스 및 키 이벤트를 처리하기 위해 추가 코드나 Modifier.focusRequester가 필요하지 않습니다.
PlayerDefaults는 상단, 중앙, 하단 슬롯에 정렬되어 있어 D패드 탐색이 직관적입니다. 슬롯을 맞춤설정하고 재정의하려면 탐색하기 쉬운 구성요소를 제공해야 합니다. 버튼이 포함된 Slider 또는 Row와 같은 대부분의 Compose 구성요소는 기본적으로 포커스를 관리합니다.