导论

在Android中模拟一个点击事件有三种方式是通过模拟MotionEvent来实现;一种是通过ADB来实现;一种是通过Instrumentation测试框架来实现


第一种:模拟MotionEvent

通用方法如下:

private void setSimulateClick(View view, float x, float y) {long downTime = SystemClock.uptimeMillis();final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_DOWN, x, y, 0);downTime += 1000;final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_UP, x, y, 0);view.onTouchEvent(downEvent);view.onTouchEvent(upEvent);downEvent.recycle();upEvent.recycle();}

Demo:

package com.xys.simulateevent;import android.app.Activity;import android.os.Bundle;import android.os.SystemClock;import android.view.MotionEvent;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) findViewById(R.id.button1);}public void clickeMe(View view) {Toast.makeText(this, "clicked", Toast.LENGTH_LONG).show();}public void simulate(View view) {setSimulateClick(button, 160, 100);}private void setSimulateClick(View view, float x, float y) {long downTime = SystemClock.uptimeMillis();final MotionEvent downEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_DOWN, x, y, 0);downTime += 1000;final MotionEvent upEvent = MotionEvent.obtain(downTime, downTime,MotionEvent.ACTION_UP, x, y, 0);view.onTouchEvent(downEvent);view.onTouchEvent(upEvent);downEvent.recycle();upEvent.recycle();}}

第二种:ADB控制

ADB中通过input来实现,用于输入 touch,key等事件
The sources are:       trackball      joystick      touchnavigation      mouse      keyboard      gamepad      touchpad      dpad      stylus      touchscreenThe commands and default sources are:      text  (Default: touchscreen)      keyevent [--longpress]  ... (Default: keyboard)      tap   (Default: touchscreen)      swipe     [duration(ms)] (Default: touchscreen)      press (Default: trackball)      roll   (Default: trackball)

Demo 输入按键enter key:
adb shell input keyevent 66

Demo 输入输入滑动操作:
adb shell input touchscreen swipe 18 665 18 350

第三种:Instrumentation

Instrumentation是Android的测试框架,通过他,可以模拟很多Activity操作

        //KeyEvent.KEYCODE_MENU//KeyEvent.KEYCODE_BACK public static void sendKeyEvent(final int KeyCode) {       new Thread() {     //不可在主线程中调用            public void run() {                try {                    Instrumentation inst = new Instrumentation();                    inst.sendKeyDownUpSync(KeyCode);               } catch (Exception e) {                    e.printStackTrace();                }             }           }.start(); }


第四种:通过使用sendevent

adb提供了控制手机的另一种实现:   sendevent [device] [type] [code] [value] eg:229就是menu的type值 sendevent /dev/input/event0 1 229 1

sendevent /dev/input/event0 1 229 0

这两句需要一起执行,因为一个点击事件包含down和up,不然不能执行操作

更多相关文章

  1. android 模拟器 使用SD卡
  2. BiliBili-IJKPlayer播放器源码分析(一)
  3. android 模拟器中启用相机API支持
  4. Android(安卓)SDK目录结构和工具介绍
  5. [Android] 升级了新的android studio之后 发生如下的报错,The fol
  6. android中的EditView控件
  7. Android(安卓)最火高速开发框架AndroidAnnotations使用具体解释
  8. android学习
  9. Android(安卓)自定义像素AVD模拟器无键盘

随机推荐

  1. Android(安卓)Studio Check Updates Conn
  2. Hbuild项目Android本地打包
  3. Android对px和dip进行尺寸转换的方法
  4. MaterialDesign中控件属性表
  5. Android下soap访问webservice
  6. Android(安卓)ActivityGroup和TabActiviy
  7. Android打开外部DB文件
  8. Android(安卓)Intent的几种用法
  9. android 音量调节时,嘟 的 发声位置
  10. Android开发之修改标题栏样式