外部キーボードの Space キーによるメディア再生の一時停止と再開

アプリでメディア ファイルを再生する場合は、物理キーボードの Space キーを押すと、再生を一時停止または再開できるようにします。

キー入力イベントに応答する

Jetpack Compose またはビューベースのアプリは、キーボードのキーが押された場合に同様の方法で対応します。アプリはキー操作イベントをリッスンして、イベントをフィルタし、Space キーなどのキー操作に応答します。

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. Space キーの押下をフィルタする

Compose の onPreviewKeyEvent 修飾子メソッドまたはビューの onKeyUp() メソッド内で、KeyEvent.KEYCODE_SPACE をフィルタして、メディア コンポーネントに正しいイベントを送信します。onKeyEvent

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;

要点

Compose

  • onPreviewKeyEvent: コンポーネント(またはその子の一つ)がフォーカスされたときにコンポーネントがハードウェア キーイベントをインターセプトできるようにする修飾子。
  • onKeyEvent: onPreviewKeyEvent と同様に、コンポーネント(またはその子の一つ)がフォーカスされたときにコンポーネントがハードウェア キーイベントをインターセプトできるようにする修飾子。

視聴回数

  • onKeyUp(): キーが離され、アクティビティ内のビュー(TextView など)で処理されないときに呼び出されるイベント ハンドラ。

結果

これでアプリは Space キーが押された場合に対応して、動画などのメディアを一時停止したり再開したりできるようになります。