monkey源码分析之事件注入方法变化(api16之后)

在上一篇文章《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)的注入事件代码。
[java]  view plain copy
  1. /*     */   public int injectEvent(IWindowManager iwm, IActivityManager iam, int verbose)  
  2. /*     */   {  
  3. /* 101 */     if (verbose > 1) { String note;  
  4. /*     */       String note;  
  5. /* 103 */       if (this.mAction == 1) {  
  6. /* 104 */         note = "ACTION_UP";  
  7. /*     */       } else {  
  8. /* 106 */         note = "ACTION_DOWN";  
  9. /*     */       }  
  10. /*     */       try  
  11. /*     */       {  
  12. /* 110 */         System.out.println(":Sending Key (" + note + "): " + this.mKeyCode + "    // " + MonkeySourceRandom.getKeyName(this.mKeyCode));  
  13. /*     */       }  
  14. /*     */       catch (ArrayIndexOutOfBoundsException e)  
  15. /*     */       {  
  16. /* 114 */         System.out.println(":Sending Key (" + note + "): " + this.mKeyCode + "    // Unknown key event");  
  17. /*     */       }  
  18. /*     */     }  
  19. /*     */       
  20. /*     */   
  21. /* 119 */     KeyEvent keyEvent = this.mKeyEvent;  
  22. /* 120 */     if (keyEvent == null) {  
  23. /* 121 */       long eventTime = this.mEventTime;  
  24. /* 122 */       if (eventTime <= 0L) {  
  25. /* 123 */         eventTime = SystemClock.uptimeMillis();  
  26. /*     */       }  
  27. /* 125 */       long downTime = this.mDownTime;  
  28. /* 126 */       if (downTime <= 0L) {  
  29. /* 127 */         downTime = eventTime;  
  30. /*     */       }  
  31. /* 129 */       keyEvent = new KeyEvent(downTime, eventTime, this.mAction, this.mKeyCode, this.mRepeatCount, this.mMetaState, this.mDeviceId, this.mScanCode, 8257);  
  32. /*     */     }  
  33. /*     */       
  34. /*     */   
  35. /* 133 */     if (!InputManager.getInstance().injectInputEvent(keyEvent, 1))  
  36. /*     */     {  
  37. /* 135 */       return 0;  
  38. /*     */     }  
  39. /* 137 */     return 1;  
  40. /*     */   }  
  41. /*     */ }  
可以看到最后的注入事件方法从原来的iwm.injectKeyEvent变成了现在的Inputmanager.getInstance().injectInputEvent方法了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值