Android8.0 在framework中添加KeyCode

       KeyCode是Android的按键代码,每个按键不管实体的还是虚拟的都对应一个int值,在/framework/base/core/java/android/view/的KeyEvent.java文件中可以查看android所有的keycode。实体的按键需要在驱动层的文件添加。如果驱动部分OK的话,当按键触发时,Android会在key上报。可用adb查看(先adb shell 链接后 在用adb event -l 命令。如下图,触发按键后有如下信息,分别是event type、event code、event value。

Android8.0 在framework中添加KeyCode_第1张图片

当得到上图你所需要的key信息后就可以在framework中将要添加的keycode添加进去了。

1./frameworks/base/data/keyboards/Generic.kl 

      在该文件添加key的value值并且定义key的名称:key 645   XXXXXX  其中645和xxxx为驱动定义的value值,XXXXXX在madev.h中定义的,645在input-event-codes.h中定义的(0x285 == 645) 。Android8.0 在framework中添加KeyCode_第2张图片

2./frameworks/native/include/input/InputEventLabels.h

      在该文件的static const InputEventLabel KEYCODES[]{}中添加: DEFINE_KEYCODE(XXXXXX),其中xxxx为驱动层上报的key。

3./frameworks/native/include/android/keycodes.h

      在该文件的enum{}里添加自定义的key值和value值 AKEYCODE_XXXXXX = 290 (这里的值与驱动层无关,是自己定义的)。

需要注意的地方如果keycode的值在以下范围内,是无效的。

a.小于272    b.大于352   c.大于等于256且小于272   d大于等于288且小于320

4./frameworks/base/core/java/android/view/KeyEvent.java

      在该文件定义keycod: public static final int KEYCODE_XXXXXX = 290; 在此需要注意几个方法:isSystemKey(int keyCode),isMediaKey(int keyCode) 等等。是什么类型的key就添加到该方法里面。

5./frameworks/base/core/res/res/values/attrs.xml

      最后在该文件的结构下添加: 。到此keycode在/frameworks下算是添加成功了。编译frameworks.jar就可以用了。

 

 

 

你可能感兴趣的:(Android,系统)