概述

OpenHarmony输入主系统(Input Kit)是一个多模输入框架,为触控板、触摸屏、鼠标、键盘等输入设备提供归一化事件处理能力。该系统支持设备列表获取、光标样式改变、事件监听、拦截等多种功能,为应用开发者提供完整的输入处理解决方案。

系统架构

输入主系统采用分层架构设计,包括设备层、事件处理层和应用接口层:

  1. 设备层:负责管理各类输入设备(键盘、鼠标、触摸屏、触控板等)
  2. 事件处理层:处理输入事件的捕获、转换和分发
  3. 应用接口层:为应用提供统一的API接口

运作机制:

  • 驱动层捕获输入设备的原始事件
  • 输入系统对事件进行归一化处理
  • 通过事件分发机制将事件传递给应用
  • 应用通过API接口获取和处理输入事件

核心功能模块

1. 输入设备管理

输入设备管理模块提供设备列表查询、设备类型识别、设备热插拔监听等功能。

主要接口:

  • getDeviceList:获取输入设备列表
  • getKeyboardType:查询键盘类型
  • on/off:监听设备热插拔事件

使用场景:

  • 检测物理键盘是否存在
  • 监听设备连接/断开状态
  • 获取特定类型输入设备信息

2. 输入事件消费

输入事件消费模块提供全局快捷键和应用快捷键的订阅和处理能力。

主要接口:

  • on/off:订阅/取消订阅系统或应用快捷键
  • setShieldStatus:设置事件屏蔽状态
  • getShieldStatus:获取事件屏蔽状态

权限要求:

  • setShieldStatus/getShieldStatus需要ohos.permission.INPUT_CONTROL_DISPATCHING权限

使用场景:

  • 注册全局快捷键(如Ctrl+C复制)
  • 处理应用内快捷键
  • 屏蔽特定输入事件

3. 输入事件监听

输入事件监听模块提供对各类输入事件的监听能力,包括按键、鼠标、触控板手势等。

主要接口:

  • on/off:监听/取消监听各类输入事件

支持的事件类型:

  • 鼠标事件(按下、移动、释放等)
  • 触摸屏事件(点击、滑动、捏合等)
  • 触控板手势(三指上划、三指轻点、四指滑动、旋转等)
  • 按键事件

使用场景:

  • 监听特定按键组合
  • 捕获复杂手势操作
  • 自定义输入事件处理逻辑

4. 系统快捷键

系统快捷键模块提供对系统预置全局快捷键的配置能力。

主要接口:

  • setKeyDownDuration:设置按键按下延迟时间

使用场景:

  • 配置全局快捷键触发延迟(如截屏快捷键)
  • 自定义系统快捷键行为

5. 按键事件处理

按键事件处理模块提供对按键事件的详细处理能力。

主要功能:

  • 按键事件监听
  • 按键状态获取
  • 按键组合识别

使用场景:

  • 自定义键盘快捷键
  • 特殊按键处理
  • 键盘输入拦截

6. 光标样式管理

光标样式管理模块提供光标样式的设置和管理能力。

主要功能:

  • 设置不同状态下的光标样式
  • 光标样式切换
  • 自定义光标样式

使用场景:

  • 根据应用状态改变光标样式
  • 提供视觉反馈
  • 增强用户体验

7. 事件拦截

事件拦截模块提供对输入事件的拦截能力,主要面向C/C++开发者。

主要接口:

  • OH_Input_AddKeyEventInterceptor:创建按键事件拦截
  • OH_Input_AddInputEventInterceptor:创建输入事件拦截
  • OH_Input_RemoveKeyEventInterceptor:删除按键事件拦截
  • OH_Input_RemoveInputEventInterceptor:删除输入事件拦截

权限要求:

  • 需要ohos.permission.INTERCEPT_INPUT_EVENT权限

使用场景:

  • 云桌面应用需要拦截输入事件
  • 自定义输入事件处理
  • 输入事件重定向

开发接口

ArkTS接口

// 导入输入模块
import { inputDevice } from '@kit.InputKit';
import { inputConsumer } from '@kit.InputKit';
import { inputMonitor } from '@kit.InputKit';
import { shortKey } from '@kit.InputKit';

// 设备管理示例
const devices = inputDevice.getDeviceList();
const keyboardType = inputDevice.getKeyboardType(deviceId);

// 事件监听示例
inputMonitor.on('mouse', (event) => {
    console.log('Mouse event:', event);
});

// 快捷键订阅示例
inputConsumer.on('key', (event) => {
    console.log('Key event:', event);
});

C/C++接口

#include "multimodalinput/oh_input_manager.h"

// 事件拦截示例
void OnKeyEventCallback(const Input_KeyEvent* keyEvent)
{
    // 处理按键事件
}

void TestInterceptor()
{
    // 添加按键事件拦截
    Input_Result ret = OH_Input_AddKeyEventInterceptor(OnKeyEventCallback, nullptr);
    // 移除按键事件监听
    ret = OH_Input_RemoveKeyEventInterceptor();
}

权限要求

输入主系统涉及多种权限:

  1. ohos.permission.INPUT_CONTROL_DISPATCHING

    • 用于setShieldStatus/getShieldStatus接口
    • 允许应用控制输入事件的分发
  2. ohos.permission.INTERCEPT_INPUT_EVENT

    • 用于事件拦截功能
    • 允许应用拦截输入事件

权限声明方式:

"requestPermissions": [
    {
        "name": "ohos.permission.INPUT_CONTROL_DISPATCHING"
    },
    {
        "name": "ohos.permission.INTERCEPT_INPUT_EVENT"
    }
]

使用场景

1. 多媒体应用

  • 自定义媒体播放控制快捷键
  • 监听手势操作控制播放
  • 根据应用状态改变光标样式

2. 游戏应用

  • 自定义游戏控制按键
  • 拦截系统按键避免误操作
  • 监听复杂手势操作

3. 办公应用

  • 自定义文档编辑快捷键
  • 监听输入事件实现特殊功能
  • 根据操作状态改变光标样式

4. 云桌面应用

  • 拦截本地输入事件
  • 将输入事件重定向到远程桌面
  • 处理特殊输入设备事件

5. 辅助功能应用

  • 监听输入事件提供辅助功能
  • 自定义输入行为
  • 为特殊需求用户提供定制化输入体验

总结

OpenHarmony输入主系统提供了完整的输入处理解决方案,支持多种输入设备和事件类型,为应用开发者提供了灵活的输入处理能力。通过设备管理、事件消费、事件监听、快捷键、按键处理、光标样式管理和事件拦截等模块,开发者可以构建出具有丰富交互体验的应用程序。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐