以下内容,针对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模拟环境,使用命令getevent调试Event设备:
# getevent
add device 1: /dev/input/event1
name: “eGalax Touch Screen”
add device 2: /dev/input/event4
name: “tegra Wired Accessory Jack”
add device 3: /dev/input/event3
name: “Logitech USB Keyboard”
add device 4: /dev/input/event2
name: “Logitech USB Keyboard”
add device 5: /dev/input/event0
name: “gpio-keys”
点击物理键盘按键”1”:
/dev/input/event2: 0004 0004 0007001e
/dev/input/event2: 0001 0002 00000001
/dev/input/event2: 0000 0000 00000000
/dev/input/event2: 0004 0004 0007001e
/dev/input/event2: 0001 0002 00000000
/dev/input/event2: 0000 0000 00000000
点击软键盘:
/dev/input/event1: 0003 0039 00000000
/dev/input/event1: 0003 0030 00000001
/dev/input/event1: 0003 0035 00000114
/dev/input/event1: 0003 0036 00000461
/dev/input/event1: 0003 0032 00000000
/dev/input/event1: 0000 0002 00000000
/dev/input/event1: 0000 0000 00000000
……
注:上述字串中,第二个数字串就是按键的扫描码,第一个数字串表示设备类型,第三个数字串表示按下、抬起等附加信息。
触摸屏上报的是坐标、按下、抬起等信息,相比而言,按键处理的过程稍微复杂一些,按键的表示从驱动层到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
配置文件:
KL(KeyLayout):按键布局文件
主要包括:trunk/sdk/emulator/keymaps/qwerty.kl和AVRCP.kl,前者为全键盘布局文件,后者用于多媒体控制;另外,前者的定义文件
KCM(KeyCharacterMap):按键字符映射文件
实现了键扫描码Scancode 到按键标签KeycodeLabel的映射,也就是上面提到的两次转化的第一次转化;
另外,因为Android已经定义了完整的标准按键,故一般不需要为Android系统添加按键,只需要根据KL文件配置按键即可。
Android系统中,对于物理键盘的支持,并没有做到对全键盘各个按键的支持,例如:KeyEvent.KEYCODE_GRAVE就是一个无效按键。在模拟器上,这个按键是正常的,但是,在实体机器上,keycode返回0,是一个无效按键。或许这是公司下层驱动的问题,权当抛砖引玉了……
那么,怎么来启动这个按键呢?
通过,上面提到的getevent命令,可以获得该按键的扫描码为“0029”,也就是十进制的41。
1. external/qemu/android/keycode.h中“kKeyCodeGrave = 399”修改为“kKeyCodeGrave = KEY_GRAVE”,这样还是不能达到目的;
2. external/webkit/WebCore/platform/android/ KeyEventAndroid.cpp
函数static int windowsKeyCodeForKeyEvent(unsigned int keyCode)中添加如下代码:
case AKEYCODE_GRAVE: return VK_OEM_3;
3. trunk/sdk/emulator/keymaps/qwerty.kl
第一行“key 399 GRAVE”修改为“key 41 GRAVE”
注:此处不再粘贴源码,相信需要的人对照源码阅读不在话下,不需要的,可以飘过了……
Tags: Input Inputmethod Qwerty | Views 1,637
相关推荐
Jquery实现QWERTY软键盘插件 一共有8种不同的风格
caps2ctrl 此应用程序添加了键盘布局(英语,美国,qwerty),该布局将物理键盘的“ Caps Lock”更改为“ ... 因此,不能在制造商禁用了Android设置的“设置”->“语言和输入”->“物理键盘”的Android设备上使用它。
输入支持可供下载的180多种语言以及字典和AI语言模型表情符号键盘各种键盘布局,包括qwerty,qwertz,拉丁脚本的azerty布局以及动态印度语言脚本布局等通过按键输入,对句子的第一个单词自动大写,自动完成,纠错和...
QWERTY-fr 基于QWERTY布局的键盘布局,带有额外的符号和变音符号,因此法语和英语的键入既轻松又快捷。 这也很容易学习!哲学概观此布局与QWERTY布局完全兼容。 QWERTY布局的所有键都保留在同一位置。 这意味着使用...
QWERTY 全键盘; 310 万像素摄像头。 流媒体 支持视频格式: H.264 、流媒体、 3GPP 、 MPEG4 和 Codec 3GP ;支持音频格式: MP3 、 AAC 、 AAC+ 、 W MA 、 MPEG4 、 WAV 、 MIDI 、 REAL 、 AUDIO 和 OGG ;支持...
midi-qwerty-keys 在浏览器中使用 qwerty 键盘作为 MIDI 键盘。安装$ npm install midi-qwerty-keys应用程序接口 var QwertyKeys = require ( 'midi-qwerty-keys' )钢琴 var noteStream = QwertyKeys ( { mode : '...
电信设备-一种具有四行Qwerty键盘的移动终端.zip
美商亚德诺公司(Analog Devices)发表ADP 5588移动式I/O扩充器,以及具有环境照明感测功能的QWERTY键盘控制器,适用于需要大型键盘矩阵与扩充型I/O线路的智能型便携式装置。 ADP 5588整合了键盘扫描、去除跳动(de-...
文本信息与网络浏览等流行功能都要求更多的数据输入,而这对于传统的双音多频 (DTMF) (0-9, #, *) 键盘会比较困难。使用这种键盘要求多端数据输入,输入效率低而且容易出错。 图 1 – QWERTY 键盘(摩托罗拉 ...
可以在下面找到讨论 可以在以下位置找到支持的聊天频道 master最新版本 master覆盖 屏幕键盘上的Android(f / w 2.1 +,API级别7+),支持多种语言。 注册Beta版频道。 Beta版本通过Google Play商店推送。 产品...
Qwerty学习者为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 :camera_with_flash:在线访问Vercel: : GitHub页面: : Gitee页数: ://kaiyiwing.gitee.io/qwerty-learner/国内用户建议使用Gitee访问项目已发布...
德州仪器推出首款具有QWERTY功能的I^2C小键盘_键盘控制器无需按键与释放按键扫描,大幅释放处理器资源.pdf
一款智能高效、简洁的桌面应用搜索工具. 支持 T9 搜索,Qwerty 搜索和语音搜索.
数据输入键盘可以用多种方法来设计,并无一定之规。为传统DTMF键盘添加更多按键对设计人员提出了挑战,本文提出XilinxCoolRunner-IICPLD应对这挑战的一种可能解决方案。
一、键盘输入不兼容 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard ...
qwerty
DotDash具有莫尔斯电码的扩展版本,该代码可复制标准QWERTY键盘上的所有字符。 有关更多信息,请参见DotDash Keyboard Wiki: 每晚建造 如果您想通过Google Play商店尝试每晚构建DotDash键盘,请使用此链接选择加入...
奎尔蒂·汉考克(Qwerty Hancock) 您的网络音频项目需要即时音乐键盘吗? Qwerty Hancock就是这样。 指定所需的八度数,给它一...将Qwerty Hancock包含在页面中后,请访问以获取有关如何初始化和自定义键盘的信息。
前端项目-qwerty-hancock,一个交互式HTML插件免费键盘为您的Web音频项目。
诺曼键盘布局 David Norman(deekayen)的Norman键盘布局的源文件和备用布局。 Windows安装程序 Mac OSX安装程序 ...Android键盘(通过AnySoftKeyboard) 请参阅 。 关键任务 移⇧ GR Shift AltGR⇧+⌥