在上一篇文章《Monkey源代码分析之事件注入》中。我们看到了monkey在注入事件的时候用到了《Monkey源代码分析番外篇之Android注入事件的三种方法比較》中的第一种方法,通过Internal
API的WindowManager的injectKeyEvent之类的方法注入事件。

这样的方法在android api level 16也就是android4.1.2之后已经发生了变化:

  • 在此之后注入事件的方式变成了使用InputManager的injectInputEvent方法了
  • 而InputManager的getInstance和injectInputEvent等方法后来又变成了隐藏方法,详细哪个版本号我没有去查,但起码我如今在看的Android 4.4.2是这种
  • 相同,uiautomator使用的注入事件方法用的也是InputManager的injectInputEvent的方法,这我想就是为什么UIAutomator仅仅支持api level 16以后的android版本号了
这里我们看下monkey在最新的版本号API Level 19(android 4.4.2)的注入事件代码。
/*     */   public int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose)
/* */ {
/* 101 */ if (verbose > 1) { String note;
/* */ String note;
/* 103 */ if (this.mAction == 1) {
/* 104 */ note = "ACTION_UP";
/* */ } else {
/* 106 */ note = "ACTION_DOWN";
/* */ }
/* */ try
/* */ {
/* 110 */ System.out.println(":Sending Key (" + note + "): " + this.mKeyCode + " // " + MonkeySourceRandom.getKeyName(this.mKeyCode));
/* */ }
/* */ catch (ArrayIndexOutOfBoundsException e)
/* */ {
/* 114 */ System.out.println(":Sending Key (" + note + "): " + this.mKeyCode + " // Unknown key event");
/* */ }
/* */ }
/* */
/* */
/* 119 */ KeyEvent keyEvent = this.mKeyEvent;
/* 120 */ if (keyEvent == null) {
/* 121 */ long eventTime = this.mEventTime;
/* 122 */ if (eventTime <= 0L) {
/* 123 */ eventTime = SystemClock.uptimeMillis();
/* */ }
/* 125 */ long downTime = this.mDownTime;
/* 126 */ if (downTime <= 0L) {
/* 127 */ downTime = eventTime;
/* */ }
/* 129 */ keyEvent = new KeyEvent(downTime, eventTime, this.mAction, this.mKeyCode, this.mRepeatCount, this.mMetaState, this.mDeviceId, this.mScanCode, 8, 257);
/* */ }
/* */
/* */
/* 133 */ if (!InputManager.getInstance().injectInputEvent(keyEvent, 1))
/* */ {
/* 135 */ return 0;
/* */ }
/* 137 */ return 1;
/* */ }
/* */ }

能够看到最后的注入事件方法从原来的iwm.injectKeyEvent变成了如今的Inputmanager.getInstance().injectInputEvent方法了。



 

作者

自主博客

微信

CSDN

天地会珠海分舵

http://techgogogo.com

服务号:TechGoGoGo

扫描码:

http://blog.csdn.net/zhubaitian


monkey源代码分析之事件注入方法变化的更多相关文章

  1. monkey源码分析之事件注入方法变化

    在上一篇文章<Monkey源码分析之事件注入>中,我们看到了monkey在注入事件的时候用到了<Monkey源码分析番外篇之Android注入事件的三种方法比较>中的第一种方法 ...

  2. Monkey源代码分析之事件注入

    本系列的上一篇文章<Monkey源代码分析之事件源>中我们描写叙述了monkey是怎么从事件源取得命令.然后将命令转换成事件放到事件队列里面的.可是到如今位置我们还没有了解monkey里面 ...

  3. Monkey源代码分析番外篇之Android注入事件的三种方法比較

    原文:http://www.pocketmagic.net/2012/04/injecting-events-programatically-on-android/#.VEoIoIuUcaV 往下分析 ...

  4. Monkey源代码分析之事件源

    上一篇文章<Monkey源代码分析之执行流程>给出了monkey执行的整个流程.让我们有一个概貌,那么往后的文章我们会尝试进一步的阐述相关的一些知识点. 这里先把整个monkey类的结构图 ...

  5. Monkey源代码分析番外篇WindowManager如何出的喷射事件的进程间的安全限制

    在分析monkey源代码时的一些背景知识不明确,例如看到monkey它是用windowmanager的injectKeyEvent的喷射事件时的方法.我发现自己陷入疙瘩,这种方法不仅能够在当前的应用程 ...

  6. Monkey源码分析之事件注入

    本系列的上一篇文章<Monkey源码分析之事件源>中我们描述了monkey是怎么从事件源取得命令,然后将命令转换成事件放到事件队列里面的,但是到现在位置我们还没有了解monkey里面的事件 ...

  7. Monkey源代码分析之执行流程

    在<MonkeyRunner源代码分析之与Android设备通讯方式>中.我们谈及到MonkeyRunner控制目标android设备有多种方法.当中之中的一个就是在目标机器启动一个mon ...

  8. Android 中View的绘制机制源代码分析 三

    到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编 ...

  9. Thrift源代码分析(八)--总结加一个完整的可执行的Thrift样例

    前面七篇文章分析了Thrfit的方方面面,看到这里时应该对Thrift有了深入的理解. Thrift源代码分析(一)-- 基本概念 Thrift源代码分析(二)-- 协议和编解码 Thrift源代码分 ...

随机推荐

  1. FPGA 17最佳论文导读 ESE: Efficient Speech Recognition Engine with Compressed LSTM on FPGA

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 后面陆续写一些关于神经网络加 ...

  2. wordpress后台加载速度异常缓慢排查记录(原创)

    原因在于在function.php函数中加入了下面的代码导致了缓慢: //停用版本更新通知remove_action('load-update-core.php', 'wp_update_themes ...

  3. [你必须知道的.NET]第二十三回:品味细节,深入.NET的类型构造器

    发布日期:2008.11.2 作者:Anytao © 2008 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 今天Artech兄在<关于Type Init ...

  4. numpy基础代码操练

    In [20]: b[0,:,1] Out[20]: array([1, 5, 9]) In [21]: b[0,:,1] Out[21]: array([1, 5, 9]) In [22]: b[0 ...

  5. Loadrunner脚本开发规范

    Loadrunner脚本开发规范 目录 1.一般约定... 3 2.代码注释约定... 4 3.格式化代码... 5 1.一般约定 1.1具体脚本规则,必须在具体代码中加注释,以便脚本开发人员阅读和理 ...

  6. cordova编译crosswalk-webview插件报错的处理办法

    一直用得好好的.今天编译cordova失败了.报错如下: :processArmv7DebugManifest :processArmv7DebugResourcesERROR: In FontFam ...

  7. 图形管线之旅 Part4

    原文:<A trip through the Graphics Pipeline 2011> 翻译:往昔之剑   转载请注明出处   欢迎回来.上个部分是关于vertex shader的, ...

  8. java.lang.TypeNotPresentException: Type org.eclipse.jetty.maven.plugin.JettyRunMojo not present的原因

    原因 :我的JDK版本不支持当前Jetty版本. 解决:将jetty版本换成较低版本的就可以,这个是我之前的我的jdk是1.7.7的 <groupId>org.eclipse.jetty& ...

  9. Centos 7 mysql 安装使用记

    某次把美团云1G 1核 centos 7 装到死机,明白了源码编译安装mysql是个大坑,遂绕路到其他大道. 安装命令 wget http://dev.mysql.com/get/mysql-comm ...

  10. CUDA学习笔记4:CUDA(英伟达显卡统一计算架构)代码运行时间测试

    CUDA内核运行时间的测量函数 cudaEvent_t start1; cudaEventCreate(&start1); cudaEvent_t stop1; cudaEventCreate ...