按键事件

对于按键事件,调用mDevices->layoutMap->map进行映射。映射实际是由 KeyLayoutMap::map完成的,KeyLayoutMap类里读取配置文件qwerty.kl,由配置 文件 qwerty.kl 决定键值的映射关系。你可以通过修 改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系。

JNI 函数
在frameworks/base/services/jni/com_android_server_KeyInputQueue.cpp文 件中,向 JAVA提供了函数android_server_KeyInputQueue_readEvent,用于读 取输入设备事件。
C代码:

static jboolean android_server_KeyInputQueue_readEvent(JNIEnv* env, jobject clazz,
                                            jobject event)
{
     gLock.lock();
     sp hub = gHub;
    if (hub == NULL) {
         hub = new EventHub;
         gHub = hub;
     }
     gLock.unlock();
     int32_t deviceId;
     int32_t type;
     int32_t scancode, keycode;
     uint32_t flags;
     int32_t value;
     nsecs_t when;
    bool res = hub->getEvent(&deviceId, &type, &scancode, &keycode,
            &flags, &value, &when);
     env->SetIntField(event, gInputOffsets.mDeviceId, (jint)deviceId);
     env->SetIntField(event, gInputOffsets.mType, (jint)type);
     env->SetIntField(event, gInputOffsets.mScancode, (jint)scancode);
     env->SetIntField(event, gInputOffsets.mKeycode, (jint)keycode);
     env->SetIntField(event, gInputOffsets.mFlags, (jint)flags);
     env->SetIntField(event, gInputOffsets.mValue, value);
     env->SetLongField(event, gInputOffsets.mWhen,
                        (jlong)(nanoseconds_to_milliseconds(when)));
    return res;
}

readEvent调用hub->getEvent读了取事件,然后转换成JAVA的结构。

事件中转线程
在frameworks/base/services/java/com/android/server/KeyInputQueue.java 里创建了一个线程,它循环的读取事件,然后把事件放入事件队列里。
Java代码:

Thread mThread = new Thread("InputDeviceReader") {
        public void run() {
            android.os.Process.setThreadPriority(
                    android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY);
            
            try {
                RawInputEvent ev = new RawInputEvent();
                while (true) {
                    InputDevice di;

// block, doesn't release the monitor
                    readEvent(ev);

boolean send = false;
                    boolean configChanged = false;
                    
                    if (false) {
                        Log.i(TAG, "Input event: dev=0x"
                                + Integer.toHexString(ev.deviceId)
                                + " type=0x" + Integer.toHexString(ev.type)
                                + " scancode=" + ev.scancode
                                + " keycode=" + ev.keycode
                                + " value=" + ev.value);
                    }
                    
                    if (ev.type == RawInputEvent.EV_DEVICE_ADDED) {
                        synchronized (mFirst) {
                            di = newInputDevice(ev.deviceId);
                            mDevices.put(ev.deviceId, di);
                            configChanged = true;
                        }
                    }

......
}
}
}
};

android键盘映射之一相关推荐

  1. Android底层和中间层共同学习系列之android键盘映射

     http://blog.csdn.net/hongjiujing/article/details/5016730 Android底层和中间层共同学习系列之android键盘映射         ...

  2. android键盘映射(转)-- good 1,android UI

    1.我们只有在button2使用了layout_weight属性,并赋值为1:但是button1和button2并没有使用这个属性,根据API可以知道,他们的layout_weight属性等于0. 2 ...

  3. android+模拟器皮肤,自定义android模拟器皮肤和键盘映射

    我想为Android模拟器创建自己的皮肤.我有照片购买了一些皮肤图像. 有一些额外的按钮,我需要映射,以便点击它时应该生成一个特定的事件. 在我的个性化皮肤文件夹的布局文件看起来是这样的:自定义and ...

  4. android 上键,在Android键盘上设置Return键

    有没有人友好的编码器知道如何更改Android键盘的返回键上的文本.我正在捕获EditText元素的return事件以启动操​​作.所以我想向用户显示他可以用该键启动操作.一些应用程序这样做.例如.他 ...

  5. linux红外键盘映射表,linux下修改键盘映射

    有段时间特别喜欢HHKB(一款适合专业人士使用的键盘),不过被它超高的价位给打败了.后来想想喜欢它的缘由有两个,第一就是它control键的位置,它的control键位于常规键盘的capslock键的 ...

  6. KEY键盘映射_手焊键盘,使用Python编写,一键放连招,还有什么你不会

    本文转自公众号机器之心 这是一个内部运行 Python 的开源键盘,可根据个人需求定制键盘映射.从此以后,「穷苦玩家」也能在 MOBA 游戏里一键放连招了,不知这样算不算硬件外挂?「氪金玩家」请绕道. ...

  7. mac 使用Karabiner配置键盘映射(2)-核心标签的解读

    2019独角兽企业重金招聘Python工程师标准>>> mac 使用Karabiner配置键盘映射(2)-核心标签的解读 KeyOverlaidModifier 使用场景:一般用在 ...

  8. apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard

    apple mac 下使用机械键盘的办法,键盘映射工具软件,apple mac Mechanical keyboard 想在苹果电脑 mac 系统下使用 机械键盘,大部分机械键盘不是为mac设计的,所 ...

  9. android 键盘点击事件监听事件,Android 键盘事件触发以及监听

    一.Android 手动显示和隐藏软键盘 如果输入法在窗口上已经显示,则隐藏,反之则显示 InputMethodManager imm = (InputMethodManager) getSystem ...

最新文章

  1. 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程
  2. django(七)之数据库表的单表-增删改查QuerySet,双下划线
  3. openstack创建外网_OpenStack的女性谈论外展,教育和指导
  4. MEF董事、中国电信云计算中心主任赵慧玲:MEF第三类网络
  5. 黑马程序员-随笔-我与程序员
  6. 「星火计划沙龙视频」腾讯自研图数据库核心研发思路揭秘
  7. tiktok说查生日_TikTok对于Nadella的Microsoft来说似乎是危险的舞步
  8. 三大报再呼救市:A股估值到了崩溃边缘
  9. Jquery实现大于等于且小于等于-遁地龙卷风
  10. 服务器负载过高的处理方式
  11. 育碧信条:AI 在手,天下我有
  12. java 英文单词命名缩写_java程序员英文单词缩写和解释
  13. linux服务器odbc在哪看,在Linux上寻找odbc.ini和odbcinst.ini文件的良好文档
  14. 阿里云在家实践计划主机申请教程
  15. initializationError报错
  16. 2015年宏观经济总结和2016年猜想
  17. 2010计算机试题答案,2010全国计算机等级考试试题与答案公布
  18. 勒索软件对企业的重大威胁分析
  19. 创业的这1个盲点,竟让我白白烧了500多万!
  20. (学习笔记)微信小程序 -- WXML模板、WXSS样式、JS逻辑交互

热门文章

  1. 基于深度学习的视觉三维重建研究总结2进阶
  2. C# 手机号码归属地查询
  3. Matlab程序问题
  4. python完成文件夹批量word转pdf文件及pdf文件合并+word文件合并
  5. 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
  6. 【中文技术文档的写作规范_P03】如何书写标点符号和控制文档体系
  7. 云端搭建linux学习环境——手把手教学,赶紧收藏以后使用
  8. 2020.11.18第十三章 事件(事件处理程序;事件对象;事件类型:UI事件;焦点事件;鼠标与键盘事件 变动事件 模拟事件)
  9. 2022第二届中国ESG与可持续发展国际峰会将于11月17日-18日在上海举行
  10. 扫描识别工具Dynamic Web TWAIN使用教程:如何自定义Web TWAIN对象