使用adb shell sendevent模拟发送事件时,需要注意发送后还需发送同步事件才能生效,具体如下:
kernel中事件的type、code定义和一些附件信息按照格式定义在所加载的*.dtsi文件,其中compatible的值对应adb shell getevent打印出来的设备名称,即 event0~event9 节点对应的设备名称
以“音量减” 事件为例,在dtsi文件中查询到该事件对应的input type为1, input code 为114,设备名称为compatible = "simulate-keys",通过getevent查询到名为simulate-keys的节点为event7,则通过adb shell sendevent 模拟发送事件的命令如下
设备节点 事件类型 事件码 事件值
adb shell sendevent /dev/input/event7 1 114 1 // Volume Down 事件类型为1,事件码为114, 按下为1,松开为0
adb shell sendevent /dev/input/event7 0 0 0 // 同步事件
// 如果发送按下事件后延迟一段时间再发送松开事件,则为长按动作,在Framwork中会触发持续重复发送KeyEvent的动作
adb shell sendevent /dev/input/event7 1 114 0 // 松开
adb shell sendevent /dev/input/event7 0 0 0 // 同步事件