Android下添加自定义按键值

 

frameworks/base/data/keyboards/Generic.kl

key 189   F19

 

key:是关键字,固定表述,不变

189:该按键在linux驱动中对应的键值,我在这里只是假设的这个值,至于具体对应的是那个可以查看“include/linux/input.h”

F19:是Android层对应驱动层键值的标识

 

frameworks/native/include/input/InputEventLabels.h

F19定义成标准键值表达

#define DEFINE_KEYCODE(key) { #key, AKEYCODE_##key }

DEFINE_KEYCODE(F19)  ----->  AKEYCODE_F19

 

frameworks/native/include/android/keycodes.h

AKEYCODE_F19 = 302,

Android层键值标识定义一个数值键值,302android层的键值

 

frameworks/base/core/res/res/values/attrs.xml

<enum name=" AKEYCODE_F19" value="302" />

定义一个全局的字符串属性值

 

frameworks/base/core/java/android/view/KeyEvent.java

public static final int KEYCODE_F19 = 302;

 

7frameworks/base/api/current.txt添加

field public static final int KEYCODE_F15=282;//0x11a

 

8)framework/base/api/system-current.txt添加

field public static final int KEYCODE_F15=282;//0x11a

 

9)framework/base/api/test-current.txt添加

field public static final int KEYCODE_F15=282;//0x11a

 

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

 

Androidframework层的键值处理函数中,捕获按键,并进行相应处理。

添加的文件是:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

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

 

 

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

重要补充:

  映射关系:

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

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值