美文网首页
Android物理输入事件(二)

Android物理输入事件(二)

作者: 天空汁橙 | 来源:发表于2017-03-16 11:49 被阅读1660次

    Android物理按键输入事件(一)

    本篇文章主要分析Android系统新增物理按键在framework层的修改

    1.添加按键及其映射

       上篇中我们知道kernel最终是通过kl文件给 user space的上报了一个整数,但是怎样确定这个kl文件. 这里可以通过如下命令查看:

    > cat /proc/bus/input/devices

    通过打印信息,我们知道设备使用的是Vendor_0001_Product_0001.kl(sunxi-keyboard.kl).我们继续查看这个文件里面的内容

    2.在sunxi-keyboard.kl文件中添加映射

    key  123 WIFI

    说明:

    key      -------关键字. 不要改动

    123     -------kernel中上报的键值.这里只是假设这个这.具体需要请参考:include/linux/input.h

    WIFI    -------123按键映射到Android中的按键,它对应的是 KeycodeLabels.h (Android 6.0:InputEventLabels.h)文件中的KEYCODES表格元素的“literal”值

    3.在frameworks/native/include/android/keycodes.h中修改

    4.修改frameworks/base/core/res/res/values/attrs.xml

    5.修改frameworks/base/core/java/android/view/KeyEvent.java

    经过如上步骤就将 123 按键 和系统中的 KEYCODE_WIFI 对应起来了,注意这里的"123“键值并不是真正意义上的123键值,他只是linux驱动向上层抛出的键值

    6.在Android的framework层的键值处理函数中,捕获按键,并进行相应处理

        在framework层的input系统中,加入对wifi按键的捕获

    frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

    添加的具体方法:在PhoneWindowManager.javainterceptKeyBeforeQueueing()函数中,捕获该键值,至于怎么处理处决您的业务处理了。

    在这里再总结下我对Android键值处理的理解,我的理解:看了一下key character map的处理,是通过读取kl文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。

    补充:  在编译固件时需要先更新一下api:make update-api

    映射关系:

    ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。

    Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射

    相关文章

      网友评论

          本文标题:Android物理输入事件(二)

          本文链接:https://www.haomeiwen.com/subject/hsydnttx.html