使用外接键盘空格键暂停和恢复媒体播放

每当您的应用播放媒体文件时,用户应该能够通过按下物理键盘上的 空格键 来暂停和恢复播放。

响应按键事件

基于 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 修饰符方法或视图的 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 中的视图(例如 TextView)未处理时调用的事件处理程序。

结果

您的应用现在可以响应 空格键 按键,以暂停和恢复视频或其他媒体。