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
포커스 가능하게 만들고 modifier 매개변수를
AndroidView에 전달하여 이벤트를 위임해야 합니다.
AndroidView( modifier = modifier.focusable().onKeyEvent { playerView.dispatchKeyEvent(it.nativeKeyEvent) }, factory = { playerView }, )
Player 컴포저블 사용
Player 컴포저블을 media3-ui-compose-material3
라이브러리에서 사용하는 경우 D패드 탐색이 기본적으로 지원됩니다. Player 및
PlayerDefaults 구성요소에는 D패드로 구성요소를 트래버스하는 자동 FocusRequester 인스턴스가 있으므로 포커스 및 키 이벤트를 처리하기 위해 추가 코드 또는
Modifier.focusRequester가 필요하지 않습니다.
PlayerDefaults는 상단, 중앙, 하단 슬롯에 정렬되어
D패드 탐색이 직관적으로 느껴집니다. 이러한 슬롯을 맞춤설정하고 재정의하려면 탐색하기 쉬운 구성요소를 제공해야 합니다. 버튼이 포함된 Slider 또는 Row와 같은 대부분의 Compose 구성요소는 기본적으로 포커스를 관리합니다.