导论

在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 最火高速开发框架AndroidAnnotations使用具体解释
  2. FIDO框架分析3(FIDO UAF Android客户端)
  3. android通过USB的MTP模式下,禁止用户在根目录有任何操作(重命名 删
  4. Android Orm框架(GreenDao)
  5. Android热插拔事件处理流程--Vold
  6. Android 最火框架XUtils之注解机制详解
  7. Android自动化测试初探(四): 模拟键盘鼠标事件(Socket+Instrumentat
  8. Android事件分发和View绘制流程分析(三)
  9. android onTouch事件的派发

随机推荐

  1. RemoteView流程
  2. android 自定义View之Path详解
  3. 百度地图集成
  4. Android 不在崩溃
  5. Android——Activity的生命周期
  6. Android WindowManager的使用 & 添加 遮
  7. 使用GDB调试Android(安卓)NDK native(C/C
  8. android之点击事件ImageView切换
  9. Android对IO进行读写操作实例
  10. android 滑动欢迎界面