您的位置:首页 > 移动开发 > Android开发

Android 增加按键

2013-12-17 14:03 225 查看
============

Android 增加按键:

    ScanCode -> KeyCodeLabel -> KeyCode -> Keyevent

-----

1) 键扫描码ScanCode是由linux的Input驱动框架定义的整数类型,可参考input.h头文件(./external/kernel-headers/original/linux/input.h)。

2) 按键码(KeyCode),这个按键码是一个整数,在上层的JAVA程序中主要通过这个值来判断系统的实现。

----

实现过程: 

1, ScanCode -> KeyCodeLabel。

    键盘布局文件(*.kl) 把ScanCode转换为KeyCodeLabel。
.kl文件在源码的devices文件夹中或设备中的/system/usr/keylayout/.kl。

    key 102      HOME

 

2,KeyCodeLabel -> KeyCode。

    通过查找KEYCODES[]数组,得到KeyCodeLabel字符串对应的KeyCode值。KEYCODES[]在文件frameworks/base/include/ui/KeycodeLabels.h 中。

    static const KeycodeLabel KEYCODES[] = {

    ...

    { "HOME", 3 },

    在frameworks/base/native/include/android/keycodes.h中定义KeyCode的枚举值。

    enum {

    ....

    AKEYCODE_HOME            = 3,

 

3,KeyCode -> Keyevent。

   KeyEvent.java中的对应KeyCode:(文件路径:frameworks/base/core/java/android/view/KeyEvent.java)。如果改动了KeyEvent,影响到API则需要调用make
update-api。

    public static final int KEYCODE_HOME            = 3;

    ....

    names.append(KEYCODE_HOME, "KEYCODE_HOME");

    ....

4,在frameworks\base\core\res\res\values\attrs.xml中增加表示属性的资源文件,添加相应用name="keycode"的attr。

 

keyevent.java中的注释

    // NOTE: If you add a new keycode here you must also add it to:
    //  isSystem()
    //  native/include/android/keycodes.h
    //  frameworks/base/include/ui/KeycodeLabels.h
    //  external/webkit/WebKit/android/plugins/ANPKeyCodes.h
    //  tools/puppet_master/PuppetMaster/nav_keys.py
    //  frameworks/base/core/res/res/values/attrs.xml
    //  commands/monkey/Monkey.java
    //  emulator?
    //
    //  Also Android currently does not reserve code ranges for vendor-
    //  specific key codes.  If you have new key codes to have, you
    //  MUST contribute a patch to the open source project to define
    //  those new codes.  This is intended to maintain a consistent
    //  set of key code definitions across all Android devices.
=============
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: