アプリでメディア ファイルを再生する場合は、物理キーボードの Spacebar キーを押すと、再生を一時停止または再開 できるようにします。
キー操作イベントに応答する
Jetpack Compose またはビューに基づくアプリは、キーボードのキーが押された場合に 同様の方法で対応します。アプリはキー操作イベントをリッスンして、イベントをフィルタし、 Spacebar キーなどのキー操作に応答します。
1. キーボードのイベントをリッスンする
Compose
Jetpack Compose では、キー入力を管理するレイアウト内の onPreviewKeyEvent 修飾子または
onKeyEvent 修飾子を使用します。
Column(modifier = Modifier.onPreviewKeyEvent { event ->
if (event.type == KeyEventType.KeyUp) {
...
}
...
})
または
Column(modifier = Modifier.onKeyEvent { event ->
if (event.type == KeyEventType.KeyUp) {
...
}
...
})
ビュー
アプリのアクティビティで、onKeyUp() メソッドをオーバーライドします。
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { ... }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { ... }
このメソッドは、押されたキーが離されると呼び出されるため、キー入力ごとに 1 回呼び出されます。
2. Spacebar キーの押下をフィルタする
Compose の onPreviewKeyEvent と onKeyEvent 修飾子メソッド、または
ビューの onKeyUp() メソッド内で、KeyEvent.KEYCODE_SPACE をフィルタしてメディア コンポーネントに正しいイベントを送信します。
Compose
Column(modifier = Modifier.onPreviewKeyEvent { event ->
if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
...
}
...
})
または
Column(modifier = Modifier.onKeyEvent { event ->
if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
...
}
...
})
ビュー
Kotlin
if (keyCode == KeyEvent.KEYCODE_SPACE) { togglePlayback() return true } return false
Java
if (keyCode == KeyEvent.KEYCODE_SPACE) { togglePlayback(); return true; } return false;
要点
KEYCODE_SPACE: Spacebar キーのキーコード定数。
Compose
onPreviewKeyEvent: コンポーネント(またはその子の一つ)がフォーカスされたときにコンポーネントがハードウェア キーイベントをインターセプトできるようにする修飾子。onKeyEvent:onPreviewKeyEventと同様に、コンポーネント(またはその子の一つ)がフォーカスされたときにコンポーネントがハードウェア キーイベントをインターセプトできるようにする修飾子。
ビュー
結果
これでアプリは Spacebar キーが押された場合に対応して、動画などのメディアを一時停止したり再開したりできるようになります。