如何监听手机音量键动作
===========

#### 问题现象

在小说阅读等场景，时常用到手机音量键实现上下页翻动，如何监听手机音量键动作？

#### 背景知识

按键事件是指组件与键盘、遥控器等按键设备交互时触发的事件，适用于所有可获焦组件，例如Button。对于默认不可获焦的组件，如Text，Image等，可以将focusable属性设置为true后使用按键事件。按键事件触发的流程和具体时机参考[按键事件数据流](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-interaction-development-guide-keyboard#按键事件数据流)。

#### 解决方案

参考[KeyCode](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-keycode#keycode)枚举表可知，音量键增减的键码值分别为KEYCODE\_VOLUME\_UP以及KEYCODE\_VOLUME\_DOWN。获取需要监听的键码值后，使用[onKeyEvent](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-events-key#onkeyevent15)或[onKeyPreIme](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-events-key#onkeypreime12)触发回调事件，关于音量键实现翻页效果可参考[音量键翻页](https://developer.huawei.com/consumer/cn/doc/architecture-guides/volume_key_turn_page-0000002293620017)。

监听音量键变化的完整代码参考如下：

@Entry
@Component
struct KeyEventExample {
  build() {
    Column() {
      _// 监听音量键的增加或减小_
      Button('KeyEvent')
        .defaultFocus(true)
        .onKeyPreIme((event?: KeyEvent) \=\> {
          if (event) {
            console.info('触发onKeyPreIme');
            if (event.keyCode \=== 16) {
              console.info('UP');
            } else if (event.keyCode \=== 17) {
              console.info('DOWN');
            }
            return false; _//_ _返回true事件被消费不会执行下面的onKeyEvent，false则会触发onKeyEvent_
          }
          return false;
        })
        .onKeyEvent((event) \=\> {
          if (event) {
            console.info('触发onKeyEvent');
            if (event.keyCode \=== 16) {
              console.info('UP');
            } else if (event.keyCode \=== 17) {
              console.info('DOWN');
            }
          }
        });
    }.height(300).width('100%').padding(35);
  }
}