android 本地input key事件

来源:互联网 发布:java项目业绩怎么写 编辑:程序博客网 时间:2024/06/15 22:45

1. 按键映射的初始化 (文件Framework/base/libs/ui/EventHub.cpp )    

EventHub::openDevice()

 ----->   //        snprintf(keylayoutFilename, sizeof(keylayoutFilename),
              //   "%s/usr/keylayout/%s.kl", root, tmpfn);    确定按键映射文件名,按键映射文件在   (qwerty.kl全键盘的定义)

            //                                                                              a. 根文件系统中的ANDROID_ROOT/usr/keylayout/目录下的*.kl

         //                                                                                 b.源码中的的各自工程目录下,如device/product/*.kl

          KeyLayoutMap::load()             解析按键映射配置文件,完成按键的映射初始化等操作,

                                                              并生成按键映射keylayoutMap 中的Vector成员m_keys

                                                              主要流程是:

                                                               a. 解析*.kl的每一行,得出底层keycode 和其映射到android系统按键的映射字串.

                                                               b. 通过android 字串,从KEYCODES[]中获取其对应的android keycode.(KeycodeLabels.h)

                                                               c. 将原始的keycode 和得到的android keycode 绑定添加到Vector成员m_keys中.

 

2. 事件的获取 (文件Framework/base/libs/ui/EventHub.cpp )    

EventHub::getEvent()

--->   //从input文件中读取input 数据

         KeyLayoutMap::map()          解析读取到的input数据,并从初始化的keylayoutMap 中的Vector成员m_keys中获取到android需要的按键keycode

解析代码如下:

    ssize_t index = m_keys.indexOfKey(scancode);    //通过input数据得到的keycode,获取其对应于vector中的索引
    const Key& k = m_keys.valueAt(index);                    //通过索引找到其映射对应的android keycode

原创粉丝点击