ANDROID输入系统
2014-01-24 08:58
232 查看
转自: http://blog.sina.com.cn/s/blog_4ad7c2540101cxlt.html
以下内容,针对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.Java框架层的处理
有KeyInputDevice等类来处理EventHub传递上来的信息,这些信息通过RawInputEvent和KeyEvent来表示。一般情况下,对于按键事件,以后者的形式传送给应用程序,而触摸屏和轨迹球事件以前者的形式转换形成MotionEvent事件传送给应用程序;
5.Android应用程序层
通过重载onKeyDown()和onkeyUp()等方法接收KeyEvent(按键事件),通过重载onTouchEvent()和onTrackballEvent()等方法接收MotionEvent(运动事件);
触摸屏上报的是坐标、按下、抬起等信息,相比而言,按键处理的过程稍微复杂一些,按键的表示从驱动层到Android的java层需要经过两次转化:
键扫描码Scancode ——按键标签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和***RCP.kl,前者为全键盘布局文件,后者用于多媒体控制;另外,前者的定义文件
2、KCM(KeyCharacterMap):按键字符映射文件
实现了键扫描码Scancode到按键标签KeycodeLabel的映射,也就是上面提到的两次转化的第一次转化;
另外,因为Android已经定义了完整的标准按键,故一般不需要为Android系统添加按键,只需要根据KL文件配置按键即可。
以下内容,针对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.Java框架层的处理
有KeyInputDevice等类来处理EventHub传递上来的信息,这些信息通过RawInputEvent和KeyEvent来表示。一般情况下,对于按键事件,以后者的形式传送给应用程序,而触摸屏和轨迹球事件以前者的形式转换形成MotionEvent事件传送给应用程序;
5.Android应用程序层
通过重载onKeyDown()和onkeyUp()等方法接收KeyEvent(按键事件),通过重载onTouchEvent()和onTrackballEvent()等方法接收MotionEvent(运动事件);
触摸屏上报的是坐标、按下、抬起等信息,相比而言,按键处理的过程稍微复杂一些,按键的表示从驱动层到Android的java层需要经过两次转化:
键扫描码Scancode ——按键标签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和***RCP.kl,前者为全键盘布局文件,后者用于多媒体控制;另外,前者的定义文件
2、KCM(KeyCharacterMap):按键字符映射文件
实现了键扫描码Scancode到按键标签KeycodeLabel的映射,也就是上面提到的两次转化的第一次转化;
另外,因为Android已经定义了完整的标准按键,故一般不需要为Android系统添加按键,只需要根据KL文件配置按键即可。
相关文章推荐
- Android 4.0 事件输入(Event Input)系统
- Android 4.0 事件输入(Event Input)系统
- Android触摸屏输入系统
- Android输入系统之App跟输入系统建立联系
- Android触摸屏输入系统
- Android 输入系统架构 笔记1
- Android输入系统参考文档
- Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序
- Android 4.0 事件输入(Event Input)系统
- Android核心分析(13)------ Android GWES之输入系统 .
- android用户输入系统详细说明
- Android触摸屏输入系统
- Android 4.0 事件输入(Event Input)系统
- 深入理解Android输入系统--初识Android输入系统
- Android 5.0(Lollipop)事件输入系统(Input System)
- android用户输入系统详细说明
- Android 4.0 事件输入(Event Input)系统
- Android 4.0 事件输入(Event Input)系统
- Android核心分析(15)--------Android输入系统之输入路径详解
- Android 4.0 事件输入(Event Input)系统