前言
多模输入标准系统组件提供传统的输入交互方式,例如按键、触控、键盘、鼠标等。 本应用于标准系统之上,为设备提供单指触控输入能力。本组件将触屏输入产生的事件上报到 JS UI 框架或用户程序框架,JS UI 框架根据上报的事件再次封装,对应用提供接口。
版本
OpenHarmony 3.1 release
源码目录
/foundation/multimodalinput/input
├── common # 公共代码
├── interfaces # 对外接口存放目录
│ └── native # 对外native层接口存放目录
│ └── innerkits # 对系统内部子系统提供native层接口存放目录
├── service # 服务框架代码
├── sa_profile # 服务启动配置文件
├── uinput # 输入事件注入模块
通过每个目录下的.gn 文件可以看到每个目录下的模块都对应动态库
\interfaces\native\innerkits\event 下的文件编出来的是 mmi_event.so
\interfaces\native\innerkits\napi 下的文件编出来的是 injecteventhandler.so
\interfaces\native\innerkits\proxy 下的文件编出来的是 libmultimodalinput_proxy.so
\service 下的文件编出来的是 libmultimodalinput_service.so
\uinput 下的文件编出来的是 mmi_uinject.so
NAPI 四大模块
1. inputConsumer 组合按键
模块提供对按键事件的监听。
对应的 NAPI 接口文件
foundation\multimodalinput\input\frameworks\napi\input_consumer\src\js_register_module.cpp
2. inputDevice 输入设备
用于监听输入设备连接、断开和变化,并查看输入设备相关信息。比如监听鼠标插拔,并获取鼠标的 id、name 和指针移动速度等信息。
对应的 NAPI 接口文件
foundation\multimodalinput\input\frameworks\napi\input_device\src\native_register_module.cpp
3. inputEventClient 注入按键
InputEventClient 模块提供了注入按键能力。
对应的 NAPI 接口文件
foundation\multimodalinput\input\frameworks\napi\input_event_client\src\js_register_module.cpp
4. inputMonitor 输入监听
InputMonitor 模块提供了监听全局触摸事件的功能。 对应的 NAPI 接口文件
foundation\multimodalinput\input\frameworks\napi\input_monitor\src\js_input_monitor_module.cpp
输入事件和设备状态数据流介绍
参考以下数据流图,我们可以很清晰地了解到在用户通过输入设备发起一次交互请求后,输入事件上报和分发全流程。
图 1 输入事件和设备状态数据流图
注:数据流图箭头示意说明
● 输入设备状态数据流:
输入设备状态数据描述输入设备的状态变化及其设备属性信息,包括:设备插入、移除状态、设备唯一标识、设备名称、设备支持的输入方式等。
输入设备状态数据,经过内核设备驱动上报给多模输入服务端的输入设备状态管理模块。在输入设备管理模块对全局输入设备状态进行管理和维护,同时设备状态会封装为可监听接口提供给上层业务模块用来监听系统输入外设的状态。
● 交互输入事件数据流:
交互输入事件数据用来描述键盘、鼠标、触摸屏输入事件;键盘事件包括:按键码、按键时间戳、按键所属设备等信息;鼠标事件包括:鼠标 X/Y 坐标、鼠标按钮(如:鼠标左 | 中 | 右)事件等;触摸事件包括:时间戳、触摸位置 X/Y 坐标等。
输入事件数据由设备驱动上报给输入事件接收模块完成输入事件从内核空间到用户空间的转发,然后再给输入事件预处理模块完成输入事件标准化处理(按键 KeyCode 映射标准化等),最后由输入事件分发模块以系统预设分发机制和原则完成事件的分发。
输入事件分发模块对于事件预处理说明:
1)输入事件分发过程会优先经过输入事件拦截模块,当有拦截器注册时,输入事件会终止继续上报,相应的拦截器会拦截所有输入事件。该事件拦截特性当前主要支持无障碍模式。
2)当没有拦截器注册时,输入事件会上报给输入事件监听模块,系统级应用(如:系统设置、桌面)通过监听输入事件,支持系统级特性(如:状态栏隐藏/消失等)。
3)事件监听模块对事件的监听不会阻断事件继续上报;支持事件监听的同时,输入事件还会继续上报。
4)对于按键事件会上报给订阅按键分发模块处理,分发给对应的应用处理,事件分发流程结束。
5)其他触摸屏事件和鼠标事件不会经过订阅按键分发模块,会继续上报给应用窗口处理。
多模输入事件分发原则
1. 鼠标/触摸屏事件分发原则
鼠标/触摸屏坐标指向哪个目标,输入事件就分发给对应的目标。
鼠标/触摸屏事件分发特殊场景说明:
如没有鼠标上的按钮按下,当前鼠标指向哪个目标,鼠标输入事件就分发给坐标锁定的目标。
如果有鼠标上的按钮按下,以第一个按钮按下时刻鼠标坐标锁定的目标作为分发标的,直到所有的按钮都抬起。
触摸屏输入时,将第一个手指按下锁定的目标作为输入事件分发标的,直到所有的手指都抬起。
2. 按键事件分发原则
按键事件分发以当前用户可视界面中的焦点作为分发标的,当前界面焦点在哪个目标上,按键事件就分发给对应的目标。
多模输入服务启动流程
多模输入的服务 ID MULTIMODAL_INPUT_CONNECT_SERVICE_ID = 3101,文件路径
foundation\multimodalinput\input\service\module_loader\src\mmi_service.cpp
多模输入服务启动
应用层的流程图
写在最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)文档用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)文档包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、OpenHarmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习文档能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习文档
鸿蒙(HarmonyOS NEXT)5.0最新学习路线
有了路线图,怎么能没有学习文档呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习文档
《鸿蒙 (OpenHarmony)开发入门教学视频》
《鸿蒙生态应用开发V3.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
●ArkTS语言
●安装DevEco Studio
●运用你的第一个ArkTS应用
●ArkUI声明式UI开发
.……
《鸿蒙开发进阶》
●Stage模型入门
●网络管理
●数据管理
●电话服务
●分布式应用开发
●通知与窗口管理
●多媒体技术
●安全技能
●任务管理
●WebGL
●国际化开发
●应用测试
●DFX面向未来设计
●鸿蒙系统移植和裁剪定制
……
《鸿蒙进阶实战》
●ArkTS实践
●UIAbility应用
●网络案例
……