本文主要总结一下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.最后,也可以查询设备的驱动文件,在驱动中修改。

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android读写文件汇总
  6. 12、从头学Android之布局之TableLayout表格布局
  7. android 默认的几层布局
  8. Android自用----- 加载png图片时出错!
  9. Android平台上利用opencv进行图像的边沿检测

随机推荐

  1. android之ListView和SimpleAdapter的组合
  2. Android(安卓)强制设置横屏或竖屏 设置全
  3. 系出名门Android(7) - 控件(View)
  4. Android(安卓)Dialog的使用
  5. android各种提示Dialog 弹出框
  6. android语音搜索结果显示页实现
  7. Android用ViewPager实现多页面的切换效果
  8. ActionBar的自定义样式
  9. listview常用的优化技巧
  10. Android序列化