【HarmonyOS Next】鸿蒙监听手机按键

【HarmonyOS Next】鸿蒙监听手机按键

一、前言

应用开发中我们会遇到监听用户实体按键,或者扩展按键的需求。亦或者是在某些场景下,禁止用户按下某些按键的业务需求。

这两种需求,鸿蒙都提供了对应的监听事件进行处理。

onKeyEvent 默认的按钮监听事件

onKeyPreIme 这是优先级最高的监听回调,别上面多了一个return开关,用于告诉系统监听事件是否再向下传递。

窗口是第一级接收按钮事件的实体。后续会传递给后三级。

二、解决方案参考

我们以音量实体按键举例,

通过绑定onKeyEvent按键监听来获取按键事件的回调。需要注意的是,绑定了按键事件需要控件获得焦点时,用户去操作按键才会有监听回调。

dart 复制代码
		// 给控件添加默认聚焦
      .defaultFocus(true)
          // 给Button设置onKeyEvent事件
        .onKeyEvent((event?: KeyEvent) => {
        })

使用onKeyPreIme屏蔽音量使用下键。

dart 复制代码
import { KeyCode } from '@kit.InputKit';

@Entry
@Component
struct PreImeEventExample {
  build() {
    Column() {
      Search({
        placeholder: "Search..."
      })
        .width("80%")
        .height("40vp")
        .border({ radius:"20vp" })
        .onKeyPreIme((event:KeyEvent) => {
          // 屏蔽音量使用下键
          if (event.keyCode == KeyCode.KEYCODE_VOLUME_DOWN) {
            return true;
          }
          return false;
        })
    }
  }
}

三、DEMO源码示例:

dart 复制代码
import { KeyCode } from '@kit.InputKit'

@Entry
@Component
struct KeyClickTestPage {
  @State text: string = ''
  @State eventType: string = ''

  build() {
    Column() {
      Button('KeyEvent')
        .defaultFocus(true)
          // 给Button设置onKeyEvent事件
        .onKeyEvent((event?: KeyEvent) => {
          if(event){
            if (event.type === KeyType.Down) {
              this.eventType = 'Down' // 按钮 按下
            }
            if (event.type === KeyType.Up) {
              this.eventType = 'Up'// 按钮 抬起
            }
            // KEYCODE_VOLUME_UP	16	音量增加键
            // KEYCODE_VOLUME_DOWN	17	音量减小键
            // KEYCODE_POWER	18	电源键
            this.text = 'onKeyEvent KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText + '\nintentionCode:' + event.intentionCode
          }
        })
        .onKeyPreIme((event:KeyEvent) => {
          // 屏蔽音量使用下键
          if (event.keyCode == KeyCode.KEYCODE_VOLUME_DOWN) {
            return true;
          }
          this.text = 'onKeyPreIme KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText + '\nintentionCode:' + event.intentionCode

          return false;
        })
      Text(this.text).padding(15)
    }.height(300).width('100%').padding(35)
  }
}

扩展资料

点击跳转参考按键Code列表:

相关推荐
Georgewu2 小时前
【HarmonyOS 7】 应用 Agent 接入云 A2A 与端 A2A 的实践详解
harmonyos
马剑威(威哥爱编程)7 小时前
【共创稿事节】HarmonyOS 7 Agent 开发实战 05:流式输出做打字机对话
华为·harmonyos
AI备忘录9 小时前
(二十五)华为华三锐捷迈普思科 ERPS 环网保护配置命令(G.8032 五厂商对照)
运维·服务器·网络·网络协议·华为
OH_TPC11 小时前
【鸿蒙优选三方库】@ohos/coap:让鸿蒙设备说上 IoT 的母语
物联网·华为·harmonyos·鸿蒙
程序猿追12 小时前
渐变中间那一格怎么算?用 colormath 做个鸿蒙调色器
华为·harmonyos
程序猿追12 小时前
在 HarmonyOS 6 上做了张 3D 翻转卡片,正面背面来回翻
3d·华为·harmonyos
小π军13 小时前
安卓、iOS、鸿蒙三端的理解
android·ios·harmonyos
m0_7381858213 小时前
Flutter 鸿蒙化实战:volume_controller 适配 OpenHarmony,系统音量控制
flutter·华为·harmonyos·鸿蒙
用户1179104883314 小时前
每个会话一个子进程:多会话真并行的架构取舍
开源·harmonyos
m0_7381858214 小时前
Flutter 鸿蒙化实战:webview_cookie_manager 适配 OpenHarmony,WebView Cookie 管理
flutter·华为·harmonyos·鸿蒙