• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 输入设备开发指导
2
3## 场景介绍
4
5输入设备管理提供设备热插拔监听、查询指定设备的键盘类型等能力。使用场景例如:当用户需要输入文本时,输入法会根据当前是否插入了物理键盘来决定是否弹出虚拟键盘,开发者可以通过监听设备热插拔判断是否有物理键盘插入。
6
7## 导入模块
8
9```js
10import { inputDevice } from '@kit.InputKit';
11```
12
13## 接口说明
14
15输入设备管理常用接口如下表所示,接口详细介绍请参考[ohos.multimodalInput.inputDevice文档](../../reference/apis-input-kit/js-apis-inputdevice.md)。
16
17| 接口名称  | 描述 |
18| ----------- | ------------------------------------------------------------ |
19| getDeviceList(): Promise\<Array\<number>> | 获取输入设备列表。 |
20| getKeyboardType(deviceId: number): Promise\<KeyboardType> | 获取输入设备的键盘类型。 |
21| on(type: "change", listener: Callback\<DeviceListener>): void | 监听输入设备的热插拔事件。 |
22| off(type: "change", listener?: Callback\<DeviceListener>): void | 取消监听输入设备的热插拔事件。 |
23
24## 虚拟键盘弹出检测
25
26当用户需要输入文本时,输入法会根据当前是否插入了物理键盘来决定是否弹出虚拟键盘,开发者可以通过监听设备热插拔,判断是否有物理键盘插入。
27
28### 开发步骤
29
301. 调用[getDeviceList](../../reference/apis-input-kit/js-apis-inputdevice.md#inputdevicegetdevicelist9)方法查询所有连接的输入设备,调用[getKeyboardType](../../reference/apis-input-kit/js-apis-inputdevice.md#inputdevicegetkeyboardtype9)方法遍历所有连接的设备,判断是否有物理键盘,若有则标记已有物理键盘连接,该步骤确保监听设备热插拔之前,检测所有插入的输入设备。
312. 调用[on](../../reference/apis-input-kit/js-apis-inputdevice.md#inputdeviceon9)接口监听输入设备热插拔事件,若监听到有物理键盘插入,则标记已有物理键盘连接;若监听到有物理键盘拔掉,则标记没有物理键盘连接。
32
33
34```js
35import { inputDevice } from '@kit.InputKit';
36
37@Entry
38@Component
39struct Index {
40  build() {
41    RelativeContainer() {
42      Text()
43        .onClick(() => {
44          let isPhysicalKeyboardExist = true;
45          try {
46            // 1.获取设备列表,判断是否有物理键盘连接
47            inputDevice.getDeviceList().then(data => {
48              for (let i = 0; i < data.length; ++i) {
49                inputDevice.getKeyboardType(data[i]).then(type => {
50                  if (type === inputDevice.KeyboardType.ALPHABETIC_KEYBOARD) {
51                    // 物理键盘已连接
52                    isPhysicalKeyboardExist = true;
53                  }
54                });
55              }
56            });
57            // 2.监听设备热插拔
58            inputDevice.on("change", (data) => {
59              console.info(`Device event info: ${JSON.stringify(data)}`);
60              inputDevice.getKeyboardType(data.deviceId).then((type) => {
61                console.info("The keyboard type is: " + type);
62                if (type === inputDevice.KeyboardType.ALPHABETIC_KEYBOARD && data.type == 'add') {
63                  // 物理键盘已插入
64                  isPhysicalKeyboardExist = true;
65                } else if (type == inputDevice.KeyboardType.ALPHABETIC_KEYBOARD && data.type == 'remove') {
66                  // 物理键盘已拔掉
67                  isPhysicalKeyboardExist = false;
68                }
69              });
70            });
71          } catch (error) {
72            console.error(`Execute failed, error: ${JSON.stringify(error, ["code", "message"])}`);
73          }
74        })
75    }
76  }
77}
78```
79