Android 中如何添加新的键值

    技术2022-05-19  32

    转自: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    OFFHOOKkey 60    ONHOOKkey 61    HANDFREEkey 62    PSTNCALLIN

     

    注意:新加的键值不要与已有的重复。2. kernel_imx/drivers/input/keyboard/imx51-key.c

     

    在键盘驱动中定义相应的键盘扫描码:

     

     

    static unsigned short imx51_keypad_keycode[IMX51_KEY_NUM] = { /*F1*/ 1, /*PSTN*/ 43, /*转移*/ 8, /*1*/ 9, /*6 */ 50, /***/ 14, /*音量》*/ 56, /*F2*/ 2, /*留言模式*/ 44, /*画中画*/ 45, /*2*/ 10, /*7 */ 51, /*# */ 16, /*方向上*/ 17, /*F3*/ 3, /*画面切换*/ 5, /*隐私*/ 46, /*3*/ 11, /*8 */ 52, /* 重播*/ 53, /*方向下*/ 18, /*F4*/ 4, /*注销*/ 6, /*静音*/ 47, /*4*/ 12, /*9 */ 13, /* 免提*/ 54, /*方向左*/ 19, /*F5*/ 41, /*保持*/ 7, /*闪断*/ 48, /*5*/ 49, /*0 */ 15, /* 音量《*/55, /*方向右*/ 20, /*取消*/57, /*菜单*/ 58, /* offhook */ 59, /* onhook */ 60, /* 免提 */61, /* 来电 */62 };

     

    3.  在frameworks/base/include/ui/KeycodeLabels.h(1)在数组keycodes 中添加 新定义的信息,要在{NULL, 0}之前添加static const KeycodeLabel KEYCODES[] = { ... ... { "OFFHOOK", 92 }, { "ONHOOK", 93 }, { "HANDFREE", 94 }, { "PSTNCALLIN",95 }, // NOTE: If you add a new keycode here you must also add it to: // (enum KeyCode, in this file) // frameworks/base/core/java/android/view/KeyEvent.java // tools/puppet_master/PuppetMaster.nav_keys.py // frameworks/base/core/res/res/values/attrs.xml { NULL, 0 } }

    (2)枚举类型 KeyCode 中添加typedef enum KeyCode { ... ... kKeyCodeOFFHOOK = 92, kKeyCodeONHOOK = 93, kKeyCodeHANDFREE = 94, kKeyCodePstnCallIn = 95 }KeyCode;

    4. frameworks/base/core/res/res/values/attrs.xml添加如下:<enum name="KEYCODE_OFFHOOK" value="92" /> <enum name="KEYCODE_ONHOOK" value="93" /> <enum name="KEYCODE_HANDFREE" value="94" /> <enum name="KEYCODE_PSTNCALLIN" value="95" />

    5.  frameworks/base/core/java/android/view/KeyEvent.javapublic static final int KEYCODE_OFFHOOK = 92; public static final int KEYCODE_ONHOOK = 93; public static final int KEYCODE_HANDFREE = 94; public static final int KEYCODE_PSTNCALLIN = 95;

    注意:private static final int LAST_KEYCODE    = KEYCODE_MUTE;    应改为:private static final int LAST_KEYCODE     = KEYCODE_PSTNCALLIN;在函数 public final boolean isSystem() 中,同样需要添加:case KEYCODE_OFFHOOK: case KEYCODE_ONHOOK: case KEYCODE_HANDFREE: case KEYCODE_PSTNCALLIN:

    通过以上的更改,新的键值就添加上去了,由于更改了 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


    最新回复(0)