android添加按键(二) 添加按键流程、出现问题

原创 2015年11月19日 11:47:51


Android 系统对加载键盘布局文件(Generic.kl ).
在 开发板的文件目录 /system/usr/idc 中有一系列的 *.idc  框架层会根据驱动中的配置,自动生成设备的idc 文件。
例如在 EventHub.cpp 中的 loadConfigurationLocked 方法中,会获取设备的idc 文件。如果没有获取到idc 文件,那么会采用默认的Generic.kl .
在EventHub.cpp 中的 openDeviceLocked方法中会 loadConfigurationLocked,一般而言根据,/dev/input 中的event0,envent1等。会多次调用 openDeviceLocked
如果找到 idc 文件,根据idc 文件获得对应的kl文件和kcm 文件的名称。


添加步骤

添加新的物理按键 DECT_REGISTER, DECT_PHONE
1.kl文件添加按键码映射,251,252 是 驱动上报上来的键值

key 251 DECT_REGISTER
key 252 DECT_PHONE


2.frameworks/base/include/androidfw/KeycodeLabels.h
 对KEYCODES,添加按键码

static const KeycodeLabel KEYCODES[] = {
...
 { "DECT_REGISTER",220},
 { "DECT_PHONE",221},


3.frameworks/base/core/res/res/values/attr.xml

<enum name="KEYCODE_DECT_REGISTER" value="220"/>
<enum name="KEYCODE_DECT_PHONE" value="221"/>


4.frameworks/native/include/android/keycode.h

enum {
    AKEYCODE_UNKNOWN         = 0,
    ....
    ....

添加
AKEYCODE_DECT_REGISTER   =220,
AKEYCODE_DECT_PHONE      =221,


5.frameworks/base/core/java/android/view/KeyEvent.java
添加

 public static final int KEYCODE_DECT_REGISTER=   220;
 public static final int KEYCODE_DECT_PHONE=221;

修改 LAST_KEYCODE  和 KEYCODE_SYMBOLIC_NAMES
private static final int LAST_KEYCODE           = KEYCODE_DECT_REGISTER;
// 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
//  frameworks/base/core/res/res/values/attrs.xml
//  emulator?
//  LAST_KEYCODE
//  KEYCODE_SYMBOLIC_NAMES
private static void populateKeycodeSymbolicNames() {
        SparseArray<String> names = KEYCODE_SYMBOLIC_NAMES;
        names.append(KEYCODE_UNKNOWN, "KEYCODE_UNKNOWN");
        ...
        ...
        names.append(KEYCODE_DECT_REGISTER, "KEYCODE_DECT_REGISTER");
        names.append(KEYCODE_DECT_PHONE, "KEYCODE_DECT_PHONE");
}

修改 isSystem(),追踪jni需要修改frameworks/base/lib/androidrw/input.cpp  KeyEvent::isSystemKey
bool KeyEvent::isSystemKey(int32_t keyCode) {
    switch (keyCode) {
        ....
        case AKEYCODE_DECT_REGISTER:
        case AKEYCODE_DECT_PHONE:
            return true;
    }   
    return false;
}


6.external/webkit/Source/WebKit/android/plugins/ANPKeyCodes.h
修改
   enum ANPKeyCodes {
    kUnknown_ANPKeyCode = 0,
   ...
   ...
   kDectRegister_ANPKeyCode=220,
   kDectPhone_ANPKeyCode=221,
}


以上修改完成后,可以在PhoneWindowManager 测试下这个两个键是否成功上报,如果上报成功,就可以在自己的应用中添加与这个按键相关的逻辑处理。


添加新的按键过程中可能出现的问题


   1.按键框架层中相关变量都添加后,keycode=0.
     <1>确保驱动上报键值的准确性。
     <1>确保确定设备的kl文件。根据 /system/usr/idc 中的idc 文件,以及 在EventHub.cpp中打印 设备的配置 文件,确定设备的kl 文件,设备不止一个kl文件
     <3> kl 文件的键值映射正确。
         key 123 KEYCODENAME,  KEYCODENAME 与驱动没有关系,必须保证这个 keycode 被添加成功。在KeyEvent.java 中的注释中已经说明了用户添加一个新的按键所需要修改的所有文件。
     <4> 框架层修改完成后,为了确保正确,将ap侧代码全部编译一遍,重新烧录system.img.在PhoneWindowManager 中验证按键是否正常。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android6.0 按键流程(三)InputDispatcher分发输入消息

上一篇博客分析了InputReader中扫描码与键盘码的转化,今天我们再来分析下InputDispatcher 一、InputDispatcher的notifyKey函数 接上一篇我们我们分析到I...

e科士威创业这样一个绝佳的创业机会

很庆幸能遇到e科士威创业这样一个绝佳的创业机会,"个人创业"是当今很流行的一个词,可是传统行业的生意,动轧几万几十万的创业资本,使得那些有创业理想可是囊中羞涩的年轻人望而却步。 天降大任于斯人也,必先...

android 添加按键(一) kl文件 kcm文件

在Android 系统中定义了大量的物理和虚拟按键,比如返回键,home键,数字键等。   在添加按键之前,需要了解Andorid 系统的按键软件架构,以物理按键为例。   1. 驱动层       ...

Android 按键流程(InputManagerService 以及 JNI phoneWindowManger 应用)(and5.1)

一、 初识Android输入系统 第4章通过分析WMS详细讨论了Android的窗口管理、布局及动画的工作机制。窗口不仅是内容绘制的载体,同时也是用户输入事件的目标。本章将详细讨论Android输入系...

Android6.0 按键流程(五)无线鼠标右键无效 -- hal层

最近在我们的手机上碰到这样一个问题,用otg连接无线鼠标,发现右键没反应。 于是先用getEvent命令:查看其扫描码,然后再去kl文件中,结果没找到这个扫描码对应的键盘码。 于是结合之前分析的按...

android Generic.kcm的使用

最近项目要用到组合键打开一个apk的功能,大家都知道,如果是单个键盘打开APK,那就很简单了,比如按F11打开浏览器,或者其他,自己 Generic.kl中增加,并在上层做简单的修改就行了,但是组合键...

Android之硬键盘字符映射------KeyCharacterMap

Android之硬键盘映射----字符映射KeyCharacterMap 预备基础知识: http://source.android.com/porting/keymaps_keyboard_...

价格大战局面,沈阳餐饮业如何应对?

最近,沈阳团购网站负责人告诉记者,沈阳餐饮各大商家已经开始主动要求参加入沈阳团购网,从春节到现在为止,我们网站已经接单了几千个餐饮团购。与过去不同的是,商家主动给出了较低的折扣。   沈阳大部分餐饮...

Android6.0 按键kl文件加载过程分析

在之前按键过程分析的几篇博客中,我分析过关于按键kl文件的加载,但是讲的不是非常详细,这篇博客主要把kl文件加载过程单独拉出来分析下。 1. 获取InputDeviceIdentifier的nam...

android kl文件

android kl(key layout)文件是一个映射文件,是标准linux与anroid的键值映射文件,kl文件可以有很多个,但是它有一个使用优先级:/system/usr/keylayout/...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)