在android4.4上新增加keycode

keycode是android定义好的,但是有时候无法满足需要,进行定制化难免会涉及到新增加keycode。分成两部分,驱动和framework,这里主要讲解framework部分:

一、驱动部分:

1.    在下列文件中定义

如KEY_SMS

#defineKEY_SMS 252

可能涉及的文件(可能还需要在别的文件):

kernel\include\linux\input.h

bionic\libc\kernel\common\linux\input.h

external\kernel-headers\original\linux\input.h

external\qemu\linux_keycodes.h

2.增加keypad layout文件键盘映射,linux和androidkey映射

如:

key   252   SMS

注意所用版本和项目使用的KL文件,在adb shell中进入system/usr/keylyout/可以看到所用的KL,可以修改确认使用的KL

一般定义在kpd.c 的新按键会使用***-kpd.kl,也就是注册input设备为***-kpd的会使用***-kpd.kl

新增加设备名称的时候一般会使用generic.kl和qwerty.kl

generic.kl 和qwerty.kl 在alps/frameworks/base/data/keyboards/

***-kpd.kl在config/<projectname>/

其中252 是linux键码,SMS是android识别key值 如果是需要唤醒系统,还需要增加WAKE

二、framework部分

1.修改Java识别keycode

framework/native/include/input/KeyCodelabels.h

KEYCODES数据结构后面增加

{"SMS",220}

framework/native/include/android/KeyCodes.h

在按键定义项增加AKEYCODE_SMS  = 220;

2.修改Java 键盘事件

framework/base/core/java/android/view/keyevent.java

/**

*@hide

*/

public static final int KEYCODE_SMS =220;

最后的按键为新增的

private static final int LAST_KEYCODE==KEYCODE_SMS;

以上/**/注释的code是android 非开放API或变量定义的时候,需要添加Java Doc的识别,否则要运行make update-api才能build通过

在KEYCODE_SYMBOLIC_NAMES 中增加name.append(KEYCODE_SMS, "KEYCODE_SMS");

如果是系统按键,修改framework/base/libs/ui/input.cpp

isSystemKey()增加case AKEYCODE_SMS:

3.修改XML文件描述符framework/base/core/res/res/values/attr.xml

<enum name="KEYCODE_SMS"value="220" />

4.增加测试验证log在android

framework\base\policy\src\com\android\internal\polidy\impl\phoneWindowManager.java

在interceptKeyBeforeDispatching()增加

if(keycode== KeyEvent.KEYCODE_SMS){

log.d(TAG, "interceptKeyTi KEYCODE_SMS keyCode="+ keyCode + " down=" + down + "repeatCount=" + repeatCount + “ keyguardOn=” + keyguardOn + “mHomePressed=”
+ mHomePressed + “ cancled=” + canceled)

p.s.并不是所有的linux keycode framework都会支持处理,如果您需要增加很多按键,就可能超出256(如Touch Panel的手势识别会用到很到键)

inputreader.cpp的KeyboardInputMapper这个class的process函数会先判断是否是isKeyboardOrGamepadKey.

这里面会对按键的大小进行判断,条件是:

1.小于272

2.大于352

3.大于等于256且小于272

4.大于等于288且小于320

满足其一即可。

否则会拦截掉,不会往inputDispatcher和phonewindowmanager.java走

按照以上步骤修改代码,即可在android系统中增加一个新的keycode。

时间: 2024-08-04 21:18:14

在android4.4上新增加keycode的相关文章

CAN网络上新增加的设备与网络上已有设备MAC地址冲突的软件解决方案

? 已知 1号的CAN节点的地址是0x1f 2号的CAN 节点的地址是0x1f ? ? ? ? ? ? ? ? 要达到的要求是 假设 网络上 CAN1 节点已经工作了,我现在需要在网络上接入CAN2节点. 那么CAN2节点首次上电的时候 需要给网络上的其他CAN节点 发送 数据帧(数据帧叫检测ID号帧) ,该数据帧 要求 (网络上与CAN2 节点的物理MAC地址 相同的CAN节点) 发送 响应帧 (该响应帧 是 刚上电的CAN2节点,发送给网络上其他节点的响应帧 ,由其他节点处理以后的应答帧)

css3新增加的选择器

css3新增加的选择器 一.属性选择器: E[attr] 只要有属性名E[attr=value] 属性名=属性值E[attr~=blue] 包含这个blue整个单词就可以E[attr^=c] 以这个字母c开头的E[attr$=b] 以这个字母b结尾的E[attr*=a] 只要包含a这个字母就行E[attr|=z] 只要以字母z-开头的或者就是字母z的 二.结构性伪类选择器: E:nth-child(n) 第n个子节点div:nth-child(odd) 奇数行div:nth-child(even

[原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)

nohacks 发表于 2016-5-29 17:12:51 https://www.itsk.com/thread-367736-1-8.html 原因是新版的 SkyIAR.Easy Image X会验证自身程序,防止被窜改,PE缺少验证SHA1的DLL解决办法把 RSAENH.DLL 文件 RSAENH.7z (60.85 KB, 下载次数: 978) 2013-1-26 11:50 上传点击文件名下载附件 下载积分: 活跃 -3 点 或者自己到XP系统SYSTEM32里提取,复制到PE核

HTML5每日一练之input新增加的URL类型与email类型应用

1.URL类型: <form> <input name="urls" type="url" value="http://www.w3cfuns.com/"/> <input type="submit" value="提交"/> </form> 复制代码 设置此类型后,从外观上来看与普通的元素差不多,可是如果你将此类型放到表单中之后,当点击提交按钮,如果此输入框

HTML5每日一练之input新增加的5种其他类型1种标签应用

今天介绍input在HTML5中的最后5种类型,分别是:number,range,search,tel和color 注意:此种类型的input在Opera10+中效果为佳,Chrome中效果不是十分好,外观取决于浏览器 1.number类型: <form> <input id="w3cfuns_date" name="w3cfuns.com" type="number"/> <input type="sub

京东家电2018战略解读,打破边界,带领整个家电行业踏上新征程

昨天,京东家电在北京举行了"起航新征程赋能创未来"2018战略发布会.发布会上,京东家电新任"掌门人"刘俊发布了聚焦于赋能.渠道.服务和营销的京东家电2018年重点战略.下面何玺谈谈对京东家电2018重点战略的看法.一.京东家电赋能战略,家电行业发展新机遇开放赋能是京东家电本次发布会的核心议题.京东家电新"掌门"刘俊在发布会上表示,"京东家电开放赋能战略的核心就是将自身所积累的大量零售运营和服务的能力--最有活力的会员运营体系.最广泛的

产品上新需要注意什么 总结的思维导图分享给大家

对于一个新出的产品,我们一定要对其做好充分的准备,才可以保证产品能得到大家的青睐,那具体要考虑哪些问题呢?下面是总结的产品上新需要注意的问题的思维导图集合,以及怎样绘制这样好用的思维导图的操作方法介绍,希望上面的操作方法可以帮助到大家.产品上新管理思维导图-迅捷画图1.进入迅捷画图网站编辑使用,在首页中点击进入画图字样,就可以进行在线编辑使用.我们也可以先对整个绘制网站进行熟悉使用.这样方便后续的操作更加顺利.点击面板上方的思维导图.会进入另一个专属于思维导图的页面. 2.点击页面中的立即体验就

CSS3新增加的伪类选择器

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>CSS3新增加的伪类选择器</title>    <style type="text/css">    /*root所有的元素*/        :root{            color: pink;      

ifunk笔记本何时上新?

小编前几日在朋友家看到一个没有见过的国产笔记本品牌叫ifunk,听说是这两年才出来的品牌.说实话,小编以前对国产本本完全不感冒,看到朋友家的ifunk笔记本才惊觉,原来国货在不知不觉间已经发展如此迅猛且高端,惊呆了小编. 很多朋友一定好奇究竟是什么样的笔记本能让小编如此心心念念.机智如小编,已从朋友处拍了几张照片让大伙见见这款神奇的ifunk笔记本. 怎么样,这样雪白的颜色是不是很适合小编这样娇羞的女汉子?据说,这款笔记本是ifunk品牌下的ifunk风刃1S,分官方标配和高配两个版本.小编朋友