| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |
ArkTS 注册和取消过滤回调函数(KeyEventFilter)
介绍
WindowManager提供应用窗口的管理能力,可以用于管理多模输入事件。
使用WindowManager模块提供的能力为指定窗口注入触摸事件,仅支持同进程窗口。此操作不会触发窗口焦点、层级变化或拖拽,事件会直接发送给ArkUI。
从API version 20开始支持
效果预览
1、Demo提供发起注入touchEvent事件的按钮,将事件注入到指定按钮的位置,触发指定按钮onClick事件
2、点击测试InjectEvent按钮后,发起事件注入,上方按钮被注入事件,执行了按钮的onClick,显示了当前时间

使用说明
点击测试InjectEvent按钮后:注入touchEvent事件,上方发生变化。
工程目录
entry/src/
├── main
│ ├── cpp
│ │ ├── types
│ │ ├── libentry
│ │ ├── Index.d.ts // 导出的napi函数定义
│ │ ├── oh-package.json5 // 导出napi函数配置
│ │ ├── CMakeLists.txt // CMake配置
│ │ ├── napi_init.cpp // napi函数实现
│ ├── ets
│ │ ├── entryability
│ │ ├── entrybackupability
│ │ ├── pages
│ │ ├── Index.ets // 主页面
│ ├── module.json5
│ └── resources // 静态资源
├── ohosTest
│ ├── ets
│ │ ├── test
│ │ ├── Index.test.ets // 自动化测试代码
具体实现
- 触摸事件注入功能封装在napi_init.cpp中,源码参考:napi_init.cpp:
- 创建触摸事件对象:使用OH_Input_CreateTouchEvent()创建触摸事件结构体;
- 设置事件属性:调用OH_Input_SetTouchEventAction、OH_Input_SetTouchEventFingerId、OH_Input_SetTouchEventDisplayX、OH_Input_SetTouchEventDisplayY等函数设置触摸事件的各项属性;
- 注入触摸事件:调用OH_WindowManager_InjectTouchEvent向指定窗口注入触摸事件;
- 销毁事件对象:使用OH_Input_DestroyTouchEvent释放触摸事件资源。
- ArkTS层实现,源码参考:Index.ets:
- 获取窗口ID:通过windowStage.getMainWindowSync()获取窗口属性,取得windowId;
- 调用注入接口:通过testNapi.injectEvent()调用C++层的注入函数,传入windowId、displayId、坐标、action等参数。
相关权限
不涉及。
依赖
不涉及
约束与限制
1.本示例仅支持标准系统上运行, 支持设备:华为手机、平板、PC、TV、车机、穿戴设备。
2.本示例为Stage模型,支持API20版本SDK,版本号:6.0.0.38,镜像版本号:OpenHarmony-6.0.0.38。
3.本示例需要使用DevEco Studio 6.0.0 Release及以上版本才可编译运行。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/FloatingBall > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master