输入事件分发流程:
1.InputReader 线程通过 EventHub 监听 /dev/input 内的文件
2.InputReader 得到输入事件,封装后存入 InputDispatcher 的队列
3.唤醒 InputDispatcher 
4.InputDispatcher 取出输入事件,并传递给 Window
<1>.C++层  
frameworks/native/services/inputflinger/InputDispatcher.cpp
  KeyEvent event;
  event.initialize(args->deviceId, args->source, args->action,flags, keyCode, args->scanCode, metaState, 0 /*repeatCount默认值为:0;
修改值的可以逻辑在java里/,args->downTime, args->eventTime);  
void InputDispatcher::notifyKey(const NotifyKeyArgs* args) {  
  mPolicy->interceptKeyBeforeQueueing(&event, /*byref*/ policyFlags);  
}  
<2>.JNI层
frameworks/base/services/core/jni/com_android_server_input_InputManagerService.cpp  
void NativeInputManager::interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags){  
  env->CallIntMethod(mServiceObj,gServiceClassInfo.interceptKeyBeforeQueueing/*对应java层*/,keyEventObj, policyFlags);  
 }  
<3>java层
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java  
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {  
  case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:{  
    result &= ~ACTION_PASS_TO_USER; //no return app  
    Log.e(TAG,"KeyCode = " + String.valueOf(event.getKeyCode()) + " action = " + String.valueOf(event.getAction()));  
    if(!down){  
      Log.d(TAG,"DownTime = "+ String.valueOf(event.getDownTime())+ "EventTime = " + String.valueOf(event.getEventTime()));  
      p  
    if((event.getEventTime() - event.getDownTime()) >= 3000) {  //按键大于3s
      Intent mIntent = new Intent();  
      mIntent.putExtra("blue_receive","start");  
      mIntent.setAction("com.test");  
      Log.e(TAG,"send broading...");

      mContext.sendBroadcast(mIntent,null);  

      Log.e(TAG,"Time > 3s");  
    }else{  
      Log.e(TAG,"Time < 3s");  
    }  
    }  
    break;  
  }  
 }

参考:http://blog.csdn.NET/u010122827/article/category/5944877
    http://andevele.com/2016/07/07/keypad_first/
    http://blog.csdn.net/u012439416/article/details/54605998

Android输入事件InputReader和InputDispatcher分析相关推荐

  1. Android input 系统InputReader,InputDispatcher线程实例--UI死掉

    Android input 系统InputReader,InputDispatcher线程实例–UI死掉但touch 正常报点 依据 Android input 系统初始化和启动流程中的背景: 做An ...

  2. Android 输入事件一撸到底之View接盘侠(3)

    前言 系列文章 1.Android 输入事件一撸到底之源头活水(1) 2.Android 输入事件一撸到底之DecorView拦路虎(2) 3.Android 输入事件一撸到底之View接盘侠(3 前 ...

  3. Android输入事件从读取到分发三:InputDispatcherThread线程分发事件的过程

    分析完事件的读取后,东忙西忙,不知不觉已过去了快五个月了-也不是说没有时间把这部分源码分析完,而是实在是分析不下去,因此转战到其他地方去了.然而这一块始终是心头那不舍的惦记,经过一段时间的沉淀,又参考 ...

  4. Android输入事件从读取到分发四:InputDispatcherThread发送事件到View结构树的过程

    通过上一节的分析,我们发现InputDispatcherThread使用InputChannel的sendMessage方法发送了一条消息,但是我们不知道谁在接收这条消息.因此,这一节我们的目标很明确 ...

  5. Android Touch事件原理加实例分析

    Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...

  6. Android Touch事件分发(源码分析)

    Android一文让你轻松搞定Touch事件分发 源码分析 下面,咱们一起通过源码,全面解析事件分发机制,即按顺序讲解: Activity事件分发机制 ViewGroup事件分发机制 View事件分发 ...

  7. Android输入系统(三)InputReader的加工类型和InputDispatcher的分发过程

    关联系列 解析WMS系列 深入理解JNI系列 输入系统系列 前言 在上一篇文章中,我们学习了输入事件的处理,输入事件会交由InputDispatcher进行分发,那么InputDispatcher是如 ...

  8. Android 系统(57)---深入理解Android输入系统

    <深入理解Android 卷III>第五章 深入理解Android输入系统 <深入理解Android 卷III>即将发布,作者是张大伟.此书填补了深入理解Android Fra ...

  9. 为了讲清楚Android触摸事件,我“拆了部手机”

    Android 是一个有用户界面(GUI)的操作系统,在它诞生之初,就是为带有触摸屏的手持设备准备的.作为提供给用户最重要的交互方式之一,了解触摸系统是怎么工作的,对于实际的项目开发有着非常大的帮助. ...

最新文章

  1. 根文件系统构建(Yocto方式)
  2. python except用法和作用_121个问题答对80%那么恭喜你,Python的高薪工作迟早有你一份...
  3. SQL 使用总结六(改善数据库性能)
  4. 切片器可以设置日期格式?_Power BI之相对日期的设置
  5. spring源码:@Bean注解解析
  6. 附录B. Design Motivations【设计意图】
  7. 修改XMAPP中Apache的默认访问的主页
  8. Linux下php导出excel失败且浏览器报错500
  9. 橙旗贷受邀参加浦东企联举行的迎新年书法笔会
  10. 51CTO学院学习心得
  11. 【前瞻】Nature:2022年7大“颠覆性”技术
  12. 解决麒麟V10上传文件乱码问题
  13. 评估回归模型的指标:MSE、RMSE、MAE、R2、偏差和方差
  14. break与continue--Java基础024
  15. 机器人李继红_电力设备
  16. 一步一步教你制作销售业绩分析报告
  17. 高精度加法------C++
  18. Chrome插件不翻墙安装、离线安装, 插件商店,Fatkun图片批量下载插件
  19. delphi 数字转字符串补全
  20. 分库分表ShardingSphere<四> _ 读写分离

热门文章

  1. 李洪强和你一起学习前端之(9)规避脱标,CSS可见性,滑动门案例
  2. 互联网高可用架构技术实践
  3. Docker的八种用途
  4. 两种不同编码规则的查询
  5. PHRefreshTriggerView
  6. spring核心知识点分析
  7. 视频图像处理芯片排名_关于图像处理芯片(DSP)
  8. Webstrom史上总结超实用教程
  9. Javascript第五章window对象的事件常用方法第三课
  10. Javascript条件运算符、其他运算符第五课(小二节)