Android的键盘事件处理流程学习

《Android的键盘事件处理流程学习》

 

type:文字博文

topic:Android 应用程序开发经验

contest logo:第二届 Google 暑期大学生博客分享大赛 2011 Android 成长篇

                  《Android的键盘事件处理流程学习》

 

1.基本流程      

1)内核处理按键,通过设备文件的方式提供给framework

2)framework层的KeyInputQueue.java启动线程从设备文件中读出键码,然后把读出的键码按kl文件转成相应键值(JNI调用EventHub.cpp),最后写入事件队列

      ps:读取键盘具体应该是eventHub类处理

3)framework层的WindowManagerService.java启动线程从事件队列中读出键值,然后根据当前focus分发给相应窗口

      ps:刚才是 读 键码,现在是键值。

4)UI通过KeyCharacterMap.java处理kcm规则将用户基本按键与功能键(Shift, Alt)组合,得出最终按键

 

2.两个配置文件

通常更换一种新的硬件,可能其键盘布局及键码与标准版本不同,不用更改代码,只要修改以下配置文件即可(如果增加新的未定义功能的按键,则需要修改代码)

      1)xxx.kl

      a)代码位置

      sdk/emulator/keymaps/ kl结尾文件(2.2版本模拟器使用)

      b)功能

      硬件全键盘的键码与键值的对应规则文件(如0x21对应A

      2)xxx.kcm

      a)代码位置

      sdk/emulator/keymaps/kcm结尾文件(2.2版本模拟器使用)

      b)功能

      硬件全键盘的键值对应表(如按下Alt, Shift时按键对应的键值)

           PS:又提到kl..kcm前面来自驱动层,kcm这里有组合键,还有home..

 

3.整个流程相关代码         

1)frameworks/base/core/java/android/view/KeyEvent.java(按键事件定义)

2)frameworks/base/services/java/com/android/server/KeyInputQueue.java(事件读取线程)

      //PS:相当于getMessage,待定。

3)frameworks/base/services/java/com/android/server/WindowManagerService.java(事件分发线程)

      //PS:相当于postMessage,sendMessage ,待定。

4)frameworks/base/core/java/android/view/KeyCharacterMap.java(功能键转换kcm)

5)frameworks/base/libs/ui/EventHub.cpp(键码与键值转换)

    原文作者:os66
    原文地址: http://www.cnblogs.com/titer1/archive/2011/08/15/2138625.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞