使用外接键盘空格键暂停和继续播放媒体

每当您的应用播放媒体文件时,用户都应该能够通过按实体键盘上的空格键暂停和继续播放。

响应按键事件

基于 Jetpack Compose 或视图的应用会以类似的方式响应键盘按键操作:应用监听按键事件、过滤事件并响应按键操作,例如按下空格键

1. 监听键盘事件

Compose

使用 Jetpack Compose 时,请在管理按键操作的布局中使用 onPreviewKeyEventonKeyEvent 修饰符:

Column(modifier = Modifier.onPreviewKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp) {
        ...
    }
    ...
})

Column(modifier = Modifier.onKeyEvent { event ->
    if (event.type == KeyEventType.KeyUp) {
        ...
    }
    ...
})

视图

在应用的 activity 中,替换 onKeyUp() 方法:

Kotlin

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
    ...
}

Java

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    ...
}

此方法会在每次某个按下的键被释放时调用,因此它会针对每次按键操作触发一次。

2. 过滤对空格键的按键操作

在 Compose onPreviewKeyEventonKeyEvent 修饰符方法或 View 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;

要点

Compose

  • onPreviewKeyEvent:此修饰符让组件可在自身(或其子项之一)获得焦点时拦截硬件按键事件。
  • onKeyEvent:与 onPreviewKeyEvent 类似,此修饰符让组件可在自身(或其子项之一)获得焦点时拦截硬件按键事件。

视图

  • onKeyUp():当某按键被释放且不由 activity 中的 View(例如 TextView)处理时被调用的事件处理脚本。

结果

您的应用现在可以响应对空格键的按键操作,以暂停和继续播放视频或其他媒体。