Android 按键事件处理详解

本文详细解析了Android按键事件的处理流程,包括驱动到应用层的交互、WindowManagerService的角色、InputDispatcherThread的事件分发,以及KeyEvent在过滤器、View树和Activity中的传递步骤。重点探讨了按键的映射、读取、分发和过滤过程。
摘要由CSDN通过智能技术生成
原文地址: Android按键事件处理详解 作者: Apple

公司最近做一个按键触感就对这块研究了一番,以下是个人心得。

1.开始肯定先说的是驱动这块,硬件是软件服务的,在Android这块C和java交互,有两种方式:

  1.1:驱动--JNI--服务-事件分发-上层应用处理。

  1.2:上层直接调用通过lib库的方式实现,中间使用回调机制,这种方式在Camera中有,下次再详解。

   先来看一下驱动按键映射部分的详解如下:

   映射实际是由KeyLayoutMap::map完成的,KeyLayoutMap类里读取配置文件qwerty.kl,由配置 文件 qwerty.kl决定键值的映射关系。你可以通过修改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系。
  在frameworks/base/services/jni/com_android_server_KeyInputQueue.cpp文件中,向JAVA提供了函数android_server_KeyInputQueue_readEvent,用于读取输入设备事件。

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;        boolres = hub->getEvent(&deviceId,&type, &scancode,&key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值