android 转 linux,ANDROID输入系统(转)

以下内容,针对Android2.3.3

Android的用户输入系统,自下而上,分成如下部分:

1.驱动程序

/dev/input目录下,通常是Event类型的驱动;

2.EventHub

libui的一部分,实现了对驱动程序的控制,从中获得信息;

3.KeyLayout(按键布局)和KeyCharacterMap(按键字符映射)

后缀名称分别为kl和kcm;

Android系统文件中存在/build/target/board/emulator和/build/target/board/generic目录下,一般模拟器版本通过前者编译,自定义产品的编译通过后者;

4、按键处理流程

驱动层轮询查询按键输入,有输入事件时把Event放入RawEvent队列,RawEvent队列中的每个RawEvent最后都会通过一系列转化,最终变为KeyEvent被发送给另外一个线程,即输入线程,也就是一个Activity的主线程。android

上层在文件

frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java中处理分发消息

1)Java框架层的处理

有KeyInputDevice等类来处理EventHub传递上来的信息,这些信息通过RawInputEvent和KeyEvent来表示。一般情况下,对于按键事件,以后者的形式传送给应用程序,而触摸屏和轨迹球事件以前者的形式转换形成MotionEvent事件传送给应用程序;

2)Android应用程序层

通过重载onKeyDown()和onkeyUp()等方法接收KeyEvent(按键事件),通过重载onTouchEvent()和onTrackballEvent()等方法接收MotionEvent(运动事件);触摸屏上报的是坐标、按下、抬起等信息,相比而言,按键处理的过程稍微复杂一些,按键的表示从驱动层到Android的java层需要经过两次转化:

键扫描码Scancode经过一次转化后,形成按键的标签KeycodeLabel,是一个字符串的表示形式。

按键的标签KeycodeLabel经过转换后,再次形成整数型的按键码keycode。

相关程序源码:

1.external/qemu/linux_keycodes.h

Android系统按键数值的定义;

2.external/qemu/android/keycode.h

键扫描码的定义;

3.frameworks/base/include/ui/KeycodeLabels.h

字符串到整型的映射关系,此处完成的工作是从keycodelable到keycode的转化;

4.frameworks/base/core/java/android/view/KeyEvent.java

定义KeyEvent类,其中定义是整型数字和KeycodeLabels.h内定义的整型相对应;作为平台的API供Java应用程序使用;

5.frameworks/base/core/res/res/values/attrs.xml

对应的部分和此处有关联,添加或修改按键时需要关注到该文件;

6.external/webkit/WebCore/platform/mac/KeyEventMac.mm

配置文件:

1、KL(KeyLayout):按键布局文件

主要包括:trunk/sdk/emulator/keymaps/qwerty.kl和AVRCP.kl,前者为全键盘布局文件,后者用于多媒体控制;另外,前者的定义文件

2、KCM(KeyCharacterMap):按键字符映射文件

实现了键扫描码Scancode

到按键标签KeycodeLabel的映射,也就是上面提到的两次转化的第一次转化;

另外,因为Android已经定义了完整的标准按键,故一般不需要为Android系统添加按键,只需要根据KL文件配置按键即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值