Developerの説明
https://developer.android.com/training/tv/start/controllers
キーイベント
https://developer.android.com/reference/android/view/KeyEvent
TVコントローラの適切な対応が必要とあるけど具体的には?
今のところは戻るボタンの対応くらいしか思い浮かばない
とりあえず戻るボタンのハンドリングとキーイベントのフック
onPreviewKeyEvent -> onKeyEventの流れで呼ばれてtrueを返すとイベントが消費されて以下にイベントが渡らなくなる
KeyEvent.KEYCODE_BACKでtrueを返してしまうとBackHandlerが呼ばれなくなる
TVコントローラのホームとかショットカットキーはキーフックされないようで直接対応したアプリが呼び出されるようです
※エミュレータでのみ確認
var backHandlingEnabled by remember { mutableStateOf(true) }
BackHandler(backHandlingEnabled) {
Log.d(TAG, "BackHandler")
}val requester = remember { FocusRequester() }
LaunchedEffect(Unit) {
requester.requestFocus()
}
Surface(
shape = RectangleShape,
modifier = Modifier
.fillMaxSize()
.onKeyEvent {
val name = KeyEvent.keyCodeToString(it.nativeKeyEvent.keyCode)
when(it.nativeKeyEvent.action) {
KeyEvent.ACTION_DOWN -> {
Log.d(TAG, "onKeyEvent:ACTION_DOWN: $name(${it.nativeKeyEvent.keyCode})")
}
KeyEvent.ACTION_UP -> {
Log.d(TAG, "onKeyEvent:ACTION_UP: $name(${it.nativeKeyEvent.keyCode})")
}
}
false
}
.onPreviewKeyEvent {
val name = KeyEvent.keyCodeToString(it.nativeKeyEvent.keyCode)
when(it.nativeKeyEvent.action) {
KeyEvent.ACTION_DOWN -> {
Log.d(TAG, "onPreviewKeyEvent:ACTION_DOWN: $name(${it.nativeKeyEvent.keyCode})")
}
KeyEvent.ACTION_UP -> {
Log.d(TAG, "onPreviewKeyEvent:ACTION_UP: $name(${it.nativeKeyEvent.keyCode})")
}
}
false
}
.focusRequester(requester)
.focusable()
,
) {}Android Studio Hedgehog 2023.1.1 RC 3 built on November 3, 2023
