转自:http://www.eoeandroid.com/forum-viewthread-tid-69912-fromuid-106432.html 2011-04-20 14:06:03
在android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个 新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?
这里以imx515平台为例来说明
对keypad来说,涉及到的文件有以下几个:
1.vendor/fsl/imx51_BBG/mxckpd.kl
首先在此文件中,添加新的键值信息:
Example:
key 59 OFFHOOK
key 60 ONHOOK
key 61 HANDFREE
key 62 PSTNCALLIN
注意:新加的键值不要与已有的重复。
2. kernel_imx/drivers/input/keyboard/imx51-key.c
在键盘驱动中定义相应的键盘扫描码:
3. 在frameworks/base/include/ui/KeycodeLabels.h
(1)在数组keycodes 中添加 新定义的信息,要在{NULL, 0}之前添加
(2)枚举类型 KeyCode 中添加
4. frameworks/base/core/res/res/values/attrs.xml
添加如下:
5. frameworks/base/core/java/android/view/KeyEvent.java
注意:private static final int LAST_KEYCODE = KEYCODE_MUTE; 应改为:private static final int LAST_KEYCODE = KEYCODE_PSTNCALLIN;
在函数 public final boolean isSystem() 中,同样需要添加:
通过以上的更改,新的键值就添加上去了,由于更改了 KeyEvent,影响到了API,所以需要make update-api
如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理.
6. frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事 件信息进行合理化处理。
注:
vendor/fsl/imx51_BBG/mxckpd.kl 是专门给imx515输入设备使用的keylayout文 件,所以修改mxckpd.kl 文件只是给键盘输入增加键值。如果是其他设备的输入, 如x_input,而且当没有x_iput.kl存在的时候,那么默认的kl文件就是 qwerty.kl(android-root/development/emulator/keymaps/qwerty.kl)
这个很重要。也就是说需要实现明白添加的键值是否是mxckpd.kl的input event