如何在手动提供X和Y坐标的同时使用Android模拟触摸事件?
答案 0 :(得分:105)
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: How to create a MotionEvent?
答案 1 :(得分:22)
这是一个monkeyrunner脚本,可以向应用程序发送触摸和拖动。我一直在使用它来测试我的应用程序可以处理快速重复的滑动手势。
# 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)
答案 2 :(得分:20)
使用adb Shell命令来模拟触摸事件
adb shell input tap x y
and also
adb shell sendevent /dev/input/event0 3 0 5
adb shell sendevent /dev/input/event0 3 1 29
答案 3 :(得分:1)
你应该给新的monkeyrunner一个。也许这可以解决你的问题。您将密码代码放入其中进行测试,也许触摸事件也是可能的。
答案 4 :(得分:1)
如果我清楚地理解,你想以编程方式做到这一点。然后,您可以使用View
MotionEvent
方法,并使用您需要的坐标创建{{1}}。
答案 5 :(得分:0)
使用Monkey Script时我注意到DispatchPress(KEYCODE_BACK) 什么都不做真的很糟糕。在许多情况下,这是因为Activity不消耗Key事件。 这个问题的解决方案是使用猴子脚本和 adb shell输入命令的顺序。
1使用猴子脚本给了一些很好的时机
控制。等待一定时间的活动,是一个
阻止adb通话。
2最后发送adb shell输入keyevent 4将结束正在运行的APK。
EG
adb shell monkey -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
adb shell输入keyevent 4
答案 6 :(得分:-6)
仅通过触摸屏幕生成MotionEvent。