最近在研究key事件從底層到上層的流程.發現新添加Key時候引起了一下bug.在此記錄一下.
1.熟悉adb shell getevent 命令
HP-ProBook-640-G2:~/local$ adb shell getevent -p
add device 1: /dev/input/event2
name: "mtk-kpd"
events:
KEY (0001): 0002 0003 0004 0005 0006 0007 0008 0009
000a 000b 001c 0067 0069 006a 006c 006f
0072 0073 0074 008b 009e 00d3 00d4 00e3
00e7 020b
input props:
<none>
add device 2: /dev/input/event3
name: "hwmdata"
events:
REL (0002): 0001 0002
input props:
<none>
add device 3: /dev/input/event1
name: "ACCDET"
events:
KEY (0001): 0072 0073 00a4 0246
input props:
<none>
add device 4: /dev/input/event0
name: "hall"
events:
KEY (0001): 0035 00fc
SW (0005): 0000
input props:
<none>
1.1可以看出add device 對應的是/dev/input/event. name: 對應該的名字很重要,後面keylayout 會用到.events:裏面有定義的key值.
注:key是底層工程師註冊到device上的,如果keylayout文件的命名和device對應的name不一致,則.kl文件將無效
1.2在手機目錄下存在keylayout文件可以將Key值定義在此處.
shell@sr6731_kaie_c_k:/system/usr/keylayout $
mtk-kpd.kl
qwerty.kl
ACCDET.kl
AVRCP.kl
Generic.kl
注:此處的命名對應所在設備event的name.
adb 模擬按鍵事件可以使用sendevent
eg:下面是我寫的一個腳本
#/bash
#send_event.sh:
adb root
adb remount
adb shell sendevent /dev/input/event0 0001 0028 00000001
adb shell sendevent /dev/input/event0 0000 0000 00000000
adb shell sendevent /dev/input/event0 0001 0028 00000000
adb shell sendevent /dev/input/event0 0000 0000 00000000
echo 'Done!'