当前位置: 首页 > news >正文

android 添加新的键值,自定义按键

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  在android中,上层可使用的键值默认情况下是92个,从0-91;一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢?
对keypad来说,涉及到的文件有以下几个:
  1,/vendor/qcom/7k_ffa_keypad.kl
首先在此文件中,添加新的键值信息:Example: key 123 WLS flag
注意:新加的键值不要与已有的重复。
  2. kernel/arch/arm/mach-msm/keypad_surf_ffa.c
在keypad对应的键位添加自定义的键码 如 :123
  3. frameworks/base/include/ui/keycodeLabels.h
在数组keycodes 中添加 新定义的信息
{ "MUTE", 91 }, { "WLS" , 92 }
枚举类型 KeyCode 中添加
kKeyCodeMute = 91
kKeyCodeWLS = 92
  4. frameworks/base/core/res/res/values/attrs.xml
<enum name="KEYCODE_MUTE" value="91"/>
<enum name="KEYCODE_WLS" value="92" />
  5. frameworks/base/core/java/android/view/KeyEvent.java
public static final int KEYCODE_MUTE = 91;
public static final int KEYCODE_WLS = 92;
注意: private static final int LAST_KEYCODE = KEYCODE_MUTE;
应改为: private static final int LAST_KEYCODE = KEYCODE_WLS;

在函数 public final boolean isSystem() 中,同样需要添加:
case KEYCODE_SEARCH:
case KEYCODE_WLS:
//注意:现在(Android 2.3)这个函数调用的是frameworks\base\libs\ui\Input.cpp中的bool KeyEvent::isSystemKey(int32_t keyCode)
//这里使用的按键定义在./development/ndk/platforms/android-9/include/android/keycodes.h
通过以上的更改,新的键值就添加上去了,由于更改了 KeyEvent,影响到了API,
所以需要make update-api

如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理;
对于按键事件的处理一般如下文件中
  6. frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java

综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事件信息进行合理化处理。

  注:7k_ffa_keypad.kl是专门给7k_ffa_keypad输入设备使用的keylayout文件,所以修改7k_ffa_keypad.kl 文件只是给键盘输入增加键值。如果是其他设备的输入,如x_input,而且当没有x_iput.kl存在的时候,那么默认的kl文件就是 qwerty.kl(android-root/development/emulator/keymaps/qwerty.kl)
这个很重要。也就是说需要实现明白添加的键值是否是7k_ffa_keypad的input event

  我的理解:看了一下key character map的处理,是通过读取kcm文件然后使用驱动程序提供的ioctl函数去修改来自输入设备的扫描码和系统预定义的keycode的映射关系。 kl文件应该也可以这么理解。这样的话,对于硬件扫描码,只需要修改这个kl文件。上层得到的都是系统预定义的keycode。
重要补充:
  映射关系:ir硬件扫描码在驱动里面被 映射为 kernel/include/linux/input.h里面定义的某个键值。但是这个键值只在linux系统中使用。
  Android通过源码目录下的device/xxx/xxx.kl( keylayout )文件完成linux键值到Android系统要使用的键值的映射

转载于:https://my.oschina.net/chenshouyong/blog/94147

相关文章:

  • 视频采集卡板子之后续工作
  • javaMail发邮件 简单小例子 解决QQ邮箱530 SSL问题
  • Linux 线程管理
  • tomcat 热布署
  • chrome扩展demo1-小时钟
  • java.io.Serializable引发的问题
  • oc之类排序
  • oKit项目管理软件正式提供在线服务
  • Red Hat 安装
  • 查看LoadRunner脚本请求日志和服务器返回值方法
  • iOS开发笔记 2、Cocoa简明
  • 烟花散尽漫说无(參考资料)
  • 我也谈谈《驳“永远不要对一个外行聊你的专业”【十全十美】》
  • iOS 界面 之 EALayout 无需反复编译,可视化实时界面,告别Storyboard AutoLayout Xib等等烦人的工具...
  • windows 7 启用虚拟Wifi 热点网络只需3步搞定
  • Android 架构优化~MVP 架构改造
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Apache Zeppelin在Apache Trafodion上的可视化
  • JAVA 学习IO流
  • Java小白进阶笔记(3)-初级面向对象
  • Magento 1.x 中文订单打印乱码
  • Meteor的表单提交:Form
  • orm2 中文文档 3.1 模型属性
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 程序员该如何有效的找工作?
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 大数据与云计算学习:数据分析(二)
  • 官方解决所有 npm 全局安装权限问题
  • 近期前端发展计划
  • 爬虫模拟登陆 SegmentFault
  • 盘点那些不知名却常用的 Git 操作
  • 入口文件开始,分析Vue源码实现
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 微信小程序:实现悬浮返回和分享按钮
  • 移动端解决方案学习记录
  • 中文输入法与React文本输入框的问题与解决方案
  • 2017年360最后一道编程题
  • Prometheus VS InfluxDB
  • 如何在招聘中考核.NET架构师
  • #ubuntu# #git# repository git config --global --add safe.directory
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (备忘)Java Map 遍历
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (全注解开发)学习Spring-MVC的第三天
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (五)c52学习之旅-静态数码管
  • (转)C语言家族扩展收藏 (转)C语言家族扩展