如何拦截系统音量调节的上下键
==============

#### 问题现象

在特定业务场景中，开发者需要拦截设备音量调节键的事件上报，以完成业务特定功能，比如阅读场景中，通过按音量上下键实现翻页的功能。

#### 解决措施

通过[监听系统的多模态按键事件](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-inputconsumer#inputconsumeronkeypressed16)，拦截手机的音量的上下键的系统事件上报，并插入开发者自己的业务逻辑（比如相机拍摄、翻页阅读等功能），具体示例代码如下：

import { inputConsumer, KeyEvent } from '@kit.InputKit';
import { KeyCode } from '@kit.InputKit';


@Entry
@Component
struct TestDemo14 {
  private volumeUpCallBackFunc: (event: KeyEvent) => void = () => {
  }
  private volumeDownCallBackFunc: (event: KeyEvent) => void = () => {
  }

  aboutToAppear(): void {
    try {
      let options1: inputConsumer.KeyPressedConfig = {
        key: KeyCode.KEYCODE\_VOLUME\_UP,
        action: 1, _// 按下按键的行为_
        isRepeat: false, _// 优先消费掉按键事件，不上报_
      }
      let options2: inputConsumer.KeyPressedConfig = {
        key: KeyCode.KEYCODE\_VOLUME\_DOWN,
        action: 1, _// 按下按键的行为_
        isRepeat: false, _// 优先消费掉按键事件，不上报_
      }

     _ // 点击了音量按键上事件回调_
      this.volumeUpCallBackFunc = (event: KeyEvent) => {
        this.getUIContext().getPromptAction().showToast({ message: '点击了音量按键上' })
        _// do something_
      }

     _ // 点击了音量按键下事件回调_
      this.volumeDownCallBackFunc = (event: KeyEvent) => {
        this.getUIContext().getPromptAction().showToast({ message: '点击了音量按键下' })
       _ // do something_
      }
     _ // 注册监听事件_
      inputConsumer.on('keyPressed', options1, this.volumeUpCallBackFunc);
      inputConsumer.on('keyPressed', options2, this.volumeDownCallBackFunc);
    } catch (error) {
      console.error(\`Subscribe execute failed, error: ${JSON.stringify(error, \[\`code\`, \`message\`\])}\`);
    }
  }

  build() {
    Column() {
      Row() {
        Button('取消监听音量按键上的监听')
          .onClick(() => {
            try {
            _  // 取消指定回调函数_
              inputConsumer.off('keyPressed', this.volumeUpCallBackFunc);
              this.getUIContext().getPromptAction().showToast({ message: '取消监听音量按键上的监听事件成功！' })
            } catch (error) {
              console.error(\`Unsubscribe execute failed, error: ${JSON.stringify(error, \[\`code\`, \`message\`\])}\`);
            }
          })
      }.width('100%')
      .justifyContent(FlexAlign.Center)
      .margin({ top: 20, bottom: 50 })

      Row() {
        Button('取消监听音量按键下的监听')
          .onClick(() => {
            try {
            _  // 取消指定回调函数_
              inputConsumer.off('keyPressed', this.volumeDownCallBackFunc);
              this.getUIContext().getPromptAction().showToast({ message: '取消监听音量按键下的监听事件成功！' })
            } catch (error) {
              console.error(\`Unsubscribe execute failed, error: ${JSON.stringify(error, \[\`code\`, \`message\`\])}\`);
            }
          })
      }.width('100%')
      .justifyContent(FlexAlign.Center)
      .margin({ top: 20, bottom: 50 })
      Row(){
        Text('已默认添加监听音量按键上和下的监听')
      }
      .width('100%')
      .justifyContent(FlexAlign.Center)
    }.width('100%').height('100%')
  }
}