首先要确定按键输入设备是对应/dev/input目录下哪个event,根据VID PID匹配对应的kl文件,可通过如下命令 cat /proc/bus/input/devices 查看设备信息
framework层通过.kl文件将获取的键值转换成实际按键含义后,又会通过KeycodeLabel转换成相应的keycode,具体文件在:frameworks\native\include\input\KeycodeLabels.h
然后app可以通过如下方法获得对应键按下时的keyCode值,即“F11”对应获得的keyCode即为上面自定义的<546>
添加自定义的键值:
(1)Kernel层:
① include/uapi/linux/input.h 中添加: #define KEY_LXL 123
② drivers/hid/hid-input.c 中添加: case 0x188: map_key_clear(KEY_LXL); break; //其中0x188是HID设备上报的原始键值
(2)Android系统层:
① bionic/libc/kernel/uapi/linux/input-event-codes.h 中添加 : #define KEY_LXL 123 //与kernel中头文件定义一致
② Generic.kl或Vendor_xxxx_Product_xxxx.kl文件中添加 : key 123 LXL;
③ /frameworks/native/include/android/keycodes.h 中添加 : AKEYCODE_LXL = 666,
④ /frameworks/native/include/input/KeycodeLabels.h 的KEYCODES[]数组中添加: { "LXL", 666 },
⑤ 在frameworks/base/core/res/res/values/attrs.xml 中添加 : <enum name="KEYCODE_LXL" value="666" />
⑥ 在frameworks/base/core/java/android/view/KeyEvent.java添加: public static final int KEYCODE_LXL= 666;
(转载自: https://www.cnblogs.com/blogs-of-lxl/p/9490205.html https://www.cnblogs.com/blogs-of-lxl/p/9490205.html)