zoukankan      html  css  js  c++  java
  • Android的键盘事件处理流程学习

    clip_image002

     

    type:文字博文

    topic:Android 应用程序开发经验

    contest logo:第二届 Google 暑期大学生博客分享大赛 - 2011 Android 成长篇

                      clip_image003

     

    1.基本流程      

    1)内核处理按键,通过设备文件的方式提供给framework

    2)framework层的KeyInputQueue.java启动线程从设备文件中读出键码,然后把读出的键码按kl文件转成相应键值(JNI调用EventHub.cpp),最后写入事件队列

          ps:读取键盘具体应该是eventHub类处理

    3)framework层的WindowManagerService.java启动线程从事件队列中读出键值,然后根据当前focus分发给相应窗口

          ps:刚才是 读 键码,现在是键值。

    4)UI通过KeyCharacterMap.java处理kcm规则将用户基本按键与功能键(Shift, Alt)组合,得出最终按键

     

    2.两个配置文件

    通常更换一种新的硬件,可能其键盘布局及键码与标准版本不同,不用更改代码,只要修改以下配置文件即可(如果增加新的未定义功能的按键,则需要修改代码)

          1)xxx.kl

          a)代码位置

          sdk/emulator/keymaps/ kl结尾文件(2.2版本模拟器使用)

          b)功能

          硬件全键盘的键码与键值的对应规则文件(如0x21对应A

          2)xxx.kcm

          a)代码位置

          sdk/emulator/keymaps/kcm结尾文件(2.2版本模拟器使用)

          b)功能

          硬件全键盘的键值对应表(如按下Alt, Shift时按键对应的键值)

               PS:又提到kl..kcm前面来自驱动层,kcm这里有组合键,还有home..

     

    3.整个流程相关代码         

    1)frameworks/base/core/java/android/view/KeyEvent.java(按键事件定义)

    2)frameworks/base/services/java/com/android/server/KeyInputQueue.java(事件读取线程)

          //PS:相当于getMessage,待定。

    3)frameworks/base/services/java/com/android/server/WindowManagerService.java(事件分发线程)

          //PS:相当于postMessage,sendMessage ,待定。

    4)frameworks/base/core/java/android/view/KeyCharacterMap.java(功能键转换kcm)

    5)frameworks/base/libs/ui/EventHub.cpp(键码与键值转换)

  • 相关阅读:
    2-sat问题,输出方案,几种方法(赵爽的论文染色解法+其完全改进版)浅析 / POJ3683
    hdu 4587 2013南京邀请赛B题/ / 求割点后连通分量数变形。
    最小费用最大流粗解 poj2516
    hdu3078 建层次树+在线LCA算法+排序
    hdu 3594 Cactus /uva 10510 仙人掌图判定
    有向图最小路径覆盖方法浅析、证明 //hdu 3861
    hdu 1827 有向图缩点看度数
    条件转化,2-sat BZOJ 1997
    2-sat基础题 BZOJ 1823
    2-sat 分类讨论 UVALIVE 3713
  • 原文地址:https://www.cnblogs.com/titer1/p/2138625.html
Copyright © 2011-2022 走看看