Android输入事件模拟

在一些自动化测试等情景下,输入Android应用程序产生一些屏幕点击等的输入事件以实现特定需求。本文总结了几种Android中模拟产生输入事件的方式。

1 Shell命令

在Android中有两个shell中运行的工具可以模拟产生输入事件inputsendevent。由于sendevent需要用到相应的设备,需要考虑权限问题,因此一般不常用,这里只介绍input。

Usage: input [<source>] <command> [<arg>...]

The sources are:  
      trackball
      joystick
      touchnavigation
      mouse
      keyboard
      gamepad
      touchpad
      dpad
      stylus
      touchscreen

The commands and default sources are:  
      text <string> (Default: touchscreen)
      keyevent [--longpress] <key code number or name> ... (Default: keyboard)
      tap <x> <y> (Default: touchscreen)
      swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)
      tmode <tmode>

如点击屏幕(200,300)处只需要如下命令即可:

$ input tap 200 300

2 Instrumentation

Instrumentation是Android提供的一个测试工具,可以通过它监测系统与应用程序之间的交互。使用此方法需要如下的system权限:

<uses-permission android:name="android.permission.INJECT_EVENTS"/>  

Instrumentation模拟点击屏幕(200,300)事件的方法如下:

Instrumentation instrument= new Instrumentation();  
instrument.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),  SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 200, 300, 0);
instrument.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 200, 300, 0);

3 InputManager

Android Inputmanager的injectEvent()方法也可以模拟产生输入事件(API16以上版本)。不过此方法属于隐藏方法,需要反射调用,这里不作具体描述。


1 https://www.pocketmagic.net/injecting-events-programatically-on-android/#.VKn42M2UfCI

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,922评论 25 709
  • 对于安卓系统来说,模拟用户操作是一件很危险的事情,因此到目前我所使用过的系统(Android 7以下)均没有开放模...
    呼儿海雅阅读 11,430评论 0 2
  • 有一样伪善的嘴 他和她都是快乐的人 看不到生命可悲 如果我带你回我北方的家 让你看那冬天的雪花 你是不是也会爱上它...
    梦呓几句阅读 968评论 0 1
  • 业务逻辑:为需要切图的view添加pan手势,定义一个需要截取范围视图的成员属性,定义一个成员变量用来记录手指的开...
    smirkk阅读 4,542评论 2 5
  • 院雕力量 运玉为物 留时印痕 时代需要具有时代价值观念、审美意识、艺术变现和个性语言的全新玉雕,相信一些制作工艺粗...
    腾玉空间阅读 2,833评论 5 2