问题现象
新项目开始,QA 报了个问题,蓝牙遥控器配对后按键就不响应了.......
好吧,很明显蓝牙遥控器没配对之前肯定是走红外过去的,配对以后就变成走蓝牙了,现在是按键走蓝牙有问题,那就看看吧。
开始 Debug
首先想到用 getevent 试试,输入后发现一切正常,按键后有键值打印出来,那就再往上看看。
然后通过 logcat 直接 grep keycode 发现 key 经过 Android input 到 windowsManger 后 keycode 变成了 0x00,好吧,难怪会没有响应。
那从什么时候 keycode 从有值变成 0x00 呢?
然后有请 printf 大法,同时把 android input 相关模块的全部打印开出来,再加了几条打印。
编译 push 进去最后发现是在按键转换的时候进去的时候还正常出来就变 0x00 了。
到这里大概能猜到是 keymap 文件出了问题了。
分析解决
在 android 里面按键的转换是由 KeyLayoutMap 文件完成的,我们可以为每个输入设备添加 KeyLayoutMap 文件, 也可以直接使用系统提供的默认 KeyLayoutMap 文件 Generic.kl。
当系统识别到一个新的输入设备后,便会去为其找到合适的 kl 文件,它的查找顺序如下:
/odm/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/vendor/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl
/system/us