Android的键盘事件处理
来源:互联网 发布:苹果日历推广软件 编辑:程序博客网 时间:2024/05/16 17:32
1. 基本流程
1) 内核处理按键,通过设备文件的方式提供给framework层
2) framework层的KeyInputQueue.java启动线程从设备文件中读出键码,然后把读出的键码按kl文件转成相应键值(JNI调用EventHub.cpp),最后写入事件队列
3) framework层的WindowManagerService.java启动线程从事件队列中读出键值,然后根据当前focus分发给相应窗口
4) UI通过KeyCharacterMap.java处理kcm规则将用户基本按键与功能键(Shift, Alt等)组合,得出最终按键
2. 两个配置文件
通常更换一种新的硬件,可能其键盘布局及键码与标准版本不同,不用更改代码,只要修改以下配置文件即可(如果增加新的未定义功能的按键,则需要修改代码)
1) xxx.kl
a) 位置
development/emulator/keymaps/*.kl (1.6版本模拟器使用)
sdk/emulator/keymaps/*.kl (2.2版本模拟器使用)
vendor/xxx/xxx/*.kl (特定硬件专用kl)
b) 功能
硬件全键盘的键码与键值的对应规则文件(如0x21对应A)
2) xxx.kcm
a) 位置
development/emulator/keymaps/*.kcm (1.6版本模拟器使用)
sdk/emulator/keymaps/*.kcm (2.2版本模拟器使用)
vendor/xxx/xxx/*.kcm (特定硬件专用kcm)
b) 功能
硬件全键盘的键值对应表(如按下Alt, Shift时按键对应的键值)
3. 相关代码
1) frameworks/base/core/java/android/view/KeyEvent.java (按键事件定义)
2) frameworks/base/services/java/com/android/server/KeyInputQueue.java (事件读取线程)
3) frameworks/base/services/java/com/android/server/WindowManagerService.java(事件分发线程)
4) frameworks/base/core/java/android/view/KeyCharacterMap.java (功能键转换kcm)
5) frameworks/base/libs/ui/EventHub.cpp (键码与键值转换)
4. 参考
1) http://www.armfans.net/archiver/tid-2671.html
2) http://www.armfans.net/viewthread.php?tid=2671
(转载请注明出处: http://xy0811.spaces.live.com/)
- Android的键盘事件处理
- Android的键盘事件处理
- Android处理键盘事件的小例子
- Android事件处理之处理键盘事件
- Android 键盘事件处理过程
- Android键盘事件处理流程
- android的frameworks层键盘事件处理流程分析
- Android的frameworks层键盘事件处理流程分析
- Android的frameworks层键盘事件处理流程分析
- android的frameworks层键盘事件处理流程分析
- android的frameworks层键盘事件处理流程分析
- Android的frameworks层键盘事件处理流程分析
- Android的frameworks层键盘事件处理流程分析
- android的frameworks层键盘事件处理流程分析
- android的frameworks层键盘事件处理流程分析
- android的frameworks层键盘事件处理流程分析
- Android的frameworks层键盘事件处理流程分析
- Android的frameworks层键盘事件处理流程分析
- Android改变窗口标题栏的布局
- 命令行中使用字典
- Android Density
- Ubuntu10.04下PDF中文无法显示或显示乱码的解决方法
- 开发android的桌面小程序AppWidget
- Android的键盘事件处理
- 支持3D动效的窗口管理器——Mutter
- Android程序中使用定时器Timer
- C++学习笔记(三)——标准库类型
- android的图像识别
- android语音识别方法二:应用程序自己调用语音识别库
- android语音识别简介
- 从c++到java (一)
- 编译在G1上运行的android 2.2(froyo)代码_正规版