这次我们是需要通过触摸屏产生一个虚拟按键信息上报,而且需求是不能是系统中原有的按键,由于本人菜鸟完全不会,只能不停网上搜索,还好还能找到了一个很有参考意义的文章 (Android下添加新定义的自定义键值和按键处理流程),但是由于不知道哪个是原创,所以就只列出名字。但是文章里面有部分文件的名字不符,因此也走了不少弯路,特将自己这次的调试写出,希望能给和我一样的菜鸟同学提供参考(本人使用的MSM8909W平台):
1、因为是虚拟按键,所以省略了在msm8909-pm8916-qrd.dtsi中添加对应gpio和键值的步骤。
2、在文件中kernel/include/uapi/linux/input.h中增加新的定义
#define KEY_MYADD 249 /*my add key function*/
3、在触摸屏驱动中将上报的key填写为 KEY_MYADD
4、在文件frameworks/base/data/keyboards/Generic.kl中增加键值映射
key 249 MYADD
5、在文件frameworks/native/include/android/keycodes.h中添加
AKEYCODE_MYADD = 284
6、在文件frameworks/native/include/input/InputEventLabels.h里的数组 static const InputEventLabel KEYCODES[] 中添加 DEFINE_KEYCODE(MYADD),
7、在文件frameworks/base/core/java/android/view/KeyEvent.java中添加
public static final int KEYCODE_MYADD = 284;
8、在文件frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java中添加相应的按键事件处理(我们是在interceptKeyBeforeQueueing里添加)
这样新增加一个按键定义的流程就OK了,编译需要先使用命令make update-api,不然会编译出错(因为这我一个小时没了)。另外希望有人告知如何确认使用的是哪个目录下的什么命名的kl文件呢?在找到本平台使用的Generic.kl文件用了我半天,而且还是撞上的……