Android(安卓)input处理机制(二)改键机制
本文主要总结一下Android平台的改键机制,从三个层次 驱动 键盘布局文件 InputReader
所涉及的类:
class EventHub;
struct Device;
class KeyMap;
KeylayoutMap;
class InputReader;
所涉及的文件:
frameworks \
EventHub.h;
EventHub.cpp;
KeyBoard.h;
KeyBoard.cpp;
KeyLayoutMap.h
KeyLayoutMap.cpp
KeycodeLabel.h
InputReader.cpp
kernel \
具体的驱动文件
涉及流程:
从EventHub入手,EventHub::openDeviceLocked-> EventHub::loadKeyMapLocked -> KeyMap::load -> KeyMap::loadKeyLayout -> KeyLayoutMap::load -> KeyLayoutMap::Parser::parse() -> KeyLayoutMap::Parser::parseKey() -> getKeyCodeByLabel -> lookupValueByLabel (KeyCodeLabels.h)
实施改键的关键位置
1.KeyLayoutMap::load 此处加载 (驱动名.kl) 文件,从而加载键盘布局,如设备不提供键盘布局文件,则默认加载usr/keylayout/qwerty.kl
根据键盘布局文件提供的scanCode和关键字在KeyCodeLabels中查找KeyCode。有关详细内容,请参考android键盘布局
所以,修改键盘布局文件,可以改键成功,或修改KeyCodeLabels.h包含的KeyCodeLabels数组也可以。
2.另外,也可以从InputReader 或InputDispatcher进行改键。在InputReader中我们可以拦截一个按键,并利用下面这个函数InputReader::dispatchVirtualKey()重新产生一个虚拟按键。
3.最后,也可以查询设备的驱动文件,在驱动中修改。
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android读写文件汇总
- 12、从头学Android之布局之TableLayout表格布局
- android 默认的几层布局
- Android自用----- 加载png图片时出错!
- Android平台上利用opencv进行图像的边沿检测