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