在MTK6572当中如何增加一个新按键,而且此按键值在虚拟按键当中可以使用
2014-01-14 17:47
309 查看
在物理按键当中如果你要增加一个新按键:
[Description]How to add a new key on android ICS/ICS2
[Solution]
1.在DCT tool keypad list 文件增加新按键的选项
alps\mediatek\source\dct\Keypad_YuSu.cmp中添加新键,如SMS快捷键
KEY_SYM
KEY_SMS
KEY_0
2.打开DCT tool 在keypad矩阵中在相应定义的按键位中添加新按键,如SMS,然后Save
3.修改linux 键盘码文件input.h
由于preloader\uboot\kernel\factory 等情况分开使用,相应的文件路径下的input.h都应该修改为新按键增加键码值
kernel\include\linux\input.h
bionic\libc\kernel\common\linux\input.h
external\kernel-headers\original\linux\input.h
external\qemu\linux_keycodes.h
mediatek\plaform\mt6575\preloader\src\drivers\inc\linux\input.h
Mediatek\plaform\mt6575\uboot\inc\linux\input.h
如KEY_SMS
#define KEY_SMS 252
4.增加keypad layout文件键盘映射,linux和android key映射
mediatek\config\<project name>\mtk-tpd.kl
如:
key 252 SMS
其中252 是linux键码,SMS是android识别key值 如果是需要唤醒系统,还需要增加WAKE
如果新按键是全键盘的一些生僻字符,修改: mediatek\config\<project name>\mt6575-kpd.kcm
5.修改Java识别keycode
mt6515
framework/base/include/ui/KeyCodelabels.h
mt6572平台如下路径
framework/base/include/androidfw/KeyCodelabels.h
KEYCODES数据结构后面增加
{"SMS",220}
mt6515
framework/base/native/include/android/KeyCodes.h
mt6572
framework/native/include/android/KeyCodes.h
在按键定义项增加AKEYCODE_SMS = 220;
6.修改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通过
如果是系统按键,修改
mt6515
framework/base/libs/ui/input.cpp
mt6572
framework/base/libs/androidfw/input.cpp
isSystemKey()增加case AKEYCODE_SMS:
7.修改XML文件描述符framework/base/core/res/res/values/attr.xml
<enum name="KEYCODE_SMS" value="220" />
8.增加测试验证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)
9.可以抓log确认,或者增加测试APK检测
Kernal log:
<4>[253.828234]kpd: register = fffe ffff ffff ffff ff
<4>[253.828825]kpd: (pressed) HW keycode = 0
<4>[253.829348]kpd: report Linux keycode = 252
<4>[253.829857]kpd: save new keymap state
<4>[254.030814]kpd: register = ffff ffff ffff ffff ff
<4>[254.031405]kpd: (released) HW keycode = 0
<4>[254.031936]kpd: report Linux keycode = 252
<4>[254.032445]kpd: save new keymap state
Android log:
WindowManager: interceptKeyTq keycode=220 screenIsOn=true keyguardActive=false policyFlags = #2000000 down =false canceled = false
D WindowManager: interceptKeyTi keyCode=220 down=false repeatCount=0 keyguardOn=false mHomePressed=false canceled=false
D WindowManager: interceptKeyTi KEYCODE_SMS keyCode=220 down=false repeatCount=0 keyguardOn=false mHomePressed=false canceled=false
如果要在TOUCHPANEL的虚拟按键当中也要使用到上述按键还要在
/out/target/product/sanstar72_wet_jb3/system/usr/keylayout/Generic.kl 中加入key 252 SMS
alps/frameworks/base/data/keyboards/Generic.kl 中加入key 252 SMS
在改完上述所有文件的时候,记住请使用 update-api 命令确认 update-api命令完成后然后编绎整个工程,否则会出现所有虚拟按键都无法使用的情况.
相关文章推荐
- 2.如何让一个项目的用户目前只能是姓名登录,优化为增加一个字段为姓名和用户名同时都可以实现登录 ,并且用户名不能使中文?
- 如何使用Python为Hadoop编写一个简单的MapReduce程序(这个人T字还有好几篇精华的可以看)
- 如何成为一个linux可以使用的驱动
- 使用API实现的一个增加系统桌面,并且可以任意切换的小程序.
- 如何生成一个可以使用百度地图的发布key值
- java web开发中,jsp使用了frameset框架,如何实现整个页面跳转,并且同一个表单中可以提交两个action
- 使用nginx如何让一个tomcat下的多个应用可以被多个域名绑定
- 在向一个ArrayList中添加大量元素前,可以使用ensureCapacity方法来增加ArrayList的容量
- 如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件
- 如何使用VC创建一个ActiveX控件,并使其可以被VB使用
- 如何使用自己电脑搭建一个外网可以访问的服务器
- Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。
- 如何使用自己电脑搭建一个外网可以访问的服务器
- 编写一个程序读入一行输入,然后反向打印该行,您可以把输入存储在一个char数组中: 假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次 读入一个字符,而且当您按下回车键时会产生换行符(/n)
- 百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从 这个输入 流中随机取得 m 个记录。
- 【转】如何使用VS 2013发布一个可以在Windows XP中独立运行的可执行文件
- 一个可以显示图片(包括GIF动画)的ATL控件,以及在RichEdit中如何使用此控件插入图片
- c语言使用链表编写一个可以实现班级学生管理系统,增加,删除,修改学生信息
- UITextField 软键盘如何增加一个按键
- 如何使用 asp.net 4.0 新特性 路由功能 有助于seo优化 给一个 asp.net web项目(网站项目) 增加路由功能 ,继承,给根据路由生成的url的结尾,增加一个有利于seo优化的斜杠 /,跳转到一个路由生成的url页面