如何在Android中模拟触摸事件?

如何使用Android模拟触摸事件,同时手动inputX和Y坐标?

Valentin Rocher的方法在扩展视图的情况下工作,但如果您使用的是事件侦听器,请使用以下命令:

view.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Toast toast = Toast.makeText( getApplicationContext(), "View touched", Toast.LENGTH_LONG ); toast.show(); return true; } }); // Obtain MotionEvent object long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis() + 100; float x = 0.0f; float y = 0.0f; // List of meta states found here: developer.android.com/reference/android/view/KeyEvent.html#getMetaState() int metaState = 0; MotionEvent motionEvent = MotionEvent.obtain( downTime, eventTime, MotionEvent.ACTION_UP, x, y, metaState ); // Dispatch touch event to view view.dispatchTouchEvent(motionEvent); 

有关获取MotionEvent对象的更多信息,请参阅以下内容: Android:如何创buildMotionEvent?

这里是一个monkeyrunner脚本,它发送触摸和拖动到应用程序。 我一直在使用它来testing我的应用程序可以处理快速重复的滑动手势。

 # This is a monkeyrunner jython script that opens a connection to an Android # device and continually sends a stream of swipe and touch gestures. # # See http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html # # usage: monkeyrunner swipe_monkey.py # # Imports the monkeyrunner modules used by this program from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # Connects to the current device device = MonkeyRunner.waitForConnection() # A swipe left from (x1, y) to (x2, y) in 2 steps y = 400 x1 = 100 x2 = 300 start = (x1, y) end = (x2, y) duration = 0.2 steps = 2 pause = 0.2 for i in range(1, 250): # Every so often inject a touch to spice things up! if i % 9 == 0: device.touch(x2, y, 'DOWN_AND_UP') MonkeyRunner.sleep(pause) # Swipe right device.drag(start, end, duration, steps) MonkeyRunner.sleep(pause) # Swipe left device.drag(end, start, duration, steps) MonkeyRunner.sleep(pause) 

使用adb Shell命令来模拟触摸事件

 **adb shell input tap xy** and also **adb shell sendevent /dev/input/event0 3 0 5 adb shell sendevent /dev/input/event0 3 1 29** 

如果我理解的很清楚,你想以编程的方式来做这件事。 然后,您可以使用View的onTouchEvent方法,并用您需要的坐标创build一个MotionEvent 。

你应该给新的猴子运动员一个去。 也许这可以解决你的问题。 你把键码放在里面进行testing,也许触摸事件也是可能的。

当使用猴子脚本,我注意到DispatchPress(KEYCODE_BACK)没有做什么,真的很烂。 在很多情况下,这是由于Activity没有使用Key事件。 解决这个问题的方法是在一个序列中混合使用猴脚本和adb shellinput命令。

1使用猴子脚本给了一些很好的时间控制。 等待一段时间的活动,并阻止adb电话。
2最后发送adb shellinputkeyevent 4将结束正在运行的APK。

例如

adb shell monkey -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
adb shellinputkeyevent 4

MotionEvent只能通过触摸屏幕来生成。