android系统定制化添加按键驱动步骤
2015-11-12 12:31
507 查看
修改按键做法比较简单,只要每个key的按键功能正常的话,只需更换驱动事件对应的key值,故我们先检查整个流程是否打通,打通的话就是改两端而已,要么在onKeyDown()或onkeyUp()上加功能而已。
对keypad来说,以SAR为例涉及到的有以下几个:
1.首先在*.kl文件中,添加新的键值信息:Example: key 100 MEDIA_PLAY_PAUSE ,把100定义到input.h中#define KEY_PLAYPAUSE 100
注意:新加的键值不要与已有的重复。
2. ./kernel/drivers/**/input/Adc_keypad.c驱动对应的board-8726m-refc03.c中的
adc_kp_key[]对应的键位添加自定义的键码 如 :{KEY_PLAYPAUSE , "playpause", CHAN_5, 419, 60},
3. ./frameworks/base/include/ui/keycodeLabels.h
在数组static const KeycodeLabel KEYCODES[] 中添加 新定义的信息
{ "PLAYPAUSE", 120 },
4. ./ frameworks/base/native/include/android/Keycodes.h
枚举类型 中添加
AKEYCODE_PLAYPAUSE = 120
5. ./frameworks/base/core/res/res/values/attrs.xml
<enum name="KEYCODE_BUTTON_PLAYPAUSE" value="120"/>
6. ./frameworks/base/core/java/android/view/KeyEvent.java
public static final int KEYCODE_PLAYPAUSE = 120;
注意:要修改为 private static final int LAST_KEYCODE = KEYCODE_PLAYPAUSE;
7. ./frameworks/base/libs/ui/input.java
在bool KeyEvent::isSystemKey(int32_t keyCode)()中,同样需要添加:
case AKEYCODE_PLAYPAUSE:
8. 通过以上的更改,新的键值就添加上去了,注意上面标红色的数字表示必须相同的,另外由于更改了 KeyEvent,影响到了API, 所以需要make update-api
如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理;对于按键事件的处理一般如下文件中
frameworks/policies/base/phone/com/android/internal/policy/impl /PhoneWindowManager.java,综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事件信息进行合理化处理。
补充: 在写程序时,需要捕获KEYCODE_HOME、KEYCODE_ENDCALL、KEYCODE_POWER这几个按键,但是这几个按键系统做了特殊处 理,在进行dispatch之前做了一些操作,HOME除了Keygaurd之外,不分发给任何其他APP,ENDCALL和POWER也类似,应用程序 在View和Activity的onKeyDown/Up中是监听不到的,所以需要我们系统处理之前进行处理,我的做法是自己定义一个FLAG,在自己的
程序中添加此FLAG,然后在WindowManagerServices.java中获取当前窗口的FLAG属性,如果是我们自己设置的那个FLAG, 则不进行特殊处理,直接分发按键消息到我们的APP当中,由APP自己处理。这部分代码最好添加在
@Override
boolean preprocessEvent(InputDevice device, RawInputEvent event)方法中,这个方法是KeyInputQueue中的一个虚函数,在处理按键事件之前的一个“预处理”。
注意:对HOME键的处理好像必需要修改PhoneWindowManager.java中的interceptKeyTi方法,具体可以参考对KeyGuard程序的处理。
对keypad来说,以SAR为例涉及到的有以下几个:
1.首先在*.kl文件中,添加新的键值信息:Example: key 100 MEDIA_PLAY_PAUSE ,把100定义到input.h中#define KEY_PLAYPAUSE 100
注意:新加的键值不要与已有的重复。
2. ./kernel/drivers/**/input/Adc_keypad.c驱动对应的board-8726m-refc03.c中的
adc_kp_key[]对应的键位添加自定义的键码 如 :{KEY_PLAYPAUSE , "playpause", CHAN_5, 419, 60},
3. ./frameworks/base/include/ui/keycodeLabels.h
在数组static const KeycodeLabel KEYCODES[] 中添加 新定义的信息
{ "PLAYPAUSE", 120 },
4. ./ frameworks/base/native/include/android/Keycodes.h
枚举类型 中添加
AKEYCODE_PLAYPAUSE = 120
5. ./frameworks/base/core/res/res/values/attrs.xml
<enum name="KEYCODE_BUTTON_PLAYPAUSE" value="120"/>
6. ./frameworks/base/core/java/android/view/KeyEvent.java
public static final int KEYCODE_PLAYPAUSE = 120;
注意:要修改为 private static final int LAST_KEYCODE = KEYCODE_PLAYPAUSE;
7. ./frameworks/base/libs/ui/input.java
在bool KeyEvent::isSystemKey(int32_t keyCode)()中,同样需要添加:
case AKEYCODE_PLAYPAUSE:
8. 通过以上的更改,新的键值就添加上去了,注意上面标红色的数字表示必须相同的,另外由于更改了 KeyEvent,影响到了API, 所以需要make update-api
如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理;对于按键事件的处理一般如下文件中
frameworks/policies/base/phone/com/android/internal/policy/impl /PhoneWindowManager.java,综上可知,我们可以根据需求定义自己的键值,并对键值所对应的事件信息进行合理化处理。
补充: 在写程序时,需要捕获KEYCODE_HOME、KEYCODE_ENDCALL、KEYCODE_POWER这几个按键,但是这几个按键系统做了特殊处 理,在进行dispatch之前做了一些操作,HOME除了Keygaurd之外,不分发给任何其他APP,ENDCALL和POWER也类似,应用程序 在View和Activity的onKeyDown/Up中是监听不到的,所以需要我们系统处理之前进行处理,我的做法是自己定义一个FLAG,在自己的
程序中添加此FLAG,然后在WindowManagerServices.java中获取当前窗口的FLAG属性,如果是我们自己设置的那个FLAG, 则不进行特殊处理,直接分发按键消息到我们的APP当中,由APP自己处理。这部分代码最好添加在
@Override
boolean preprocessEvent(InputDevice device, RawInputEvent event)方法中,这个方法是KeyInputQueue中的一个虚函数,在处理按键事件之前的一个“预处理”。
注意:对HOME键的处理好像必需要修改PhoneWindowManager.java中的interceptKeyTi方法,具体可以参考对KeyGuard程序的处理。
相关文章推荐
- Android编程之菜单实现方法
- 使ListView 显示头、脚视图
- MTK Android Driver :add a new key
- 【有人@我】Android中高亮变色显示文本中的关键字
- Android内存之VSS/RSS/PSS/USS
- Android Bander设计与实现 - 设计篇
- 【读书笔记】《Android多媒体开发高级编程》(二)
- Android的登陆界面生成验证码
- 学习笔记总结:Android中OpenGL ES的着色语言
- 移动开发 android 入门开发 阶段视频
- Android编程之利用服务实现电话监听的方法
- Android 实用工具Hierarchy Viewer实战
- Android三种网络通讯方式及Android的网络通讯机制
- android中showSoftInput不起作用
- Android---Gesture手势识别(一)
- Android在WebView中与JS的交互
- Android-->ViewPager setPageTransformer的简单理解
- 开源android平板开发所需的软硬件知识
- Android Fragment 真正的完全解析(下)
- 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析