Wie simuliere ich ein Touch-Ereignis mit Android, während ich die X- und Y-Koordinaten manuell gebe?
Wie simuliere ich ein Touch-Ereignis mit Android, während ich die X- und Y-Koordinaten manuell gebe?
Antworten:
Die Methode von Valentin Rocher funktioniert, wenn Sie Ihre Ansicht erweitert haben. Wenn Sie jedoch einen Ereignis-Listener verwenden, verwenden Sie Folgendes:
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);
Weitere Informationen zum Abrufen eines MotionEvent-Objekts finden Sie hier: Android: Wie erstelle ich ein MotionEvent?
downTime
ist die Zeit, in der der Benutzer auf dem Bildschirm aufsetzt, während eventTime
in diesem Fall der Benutzer seinen Finger nach oben hebt ( ACTION_UP
). Ich bin nicht sicher, ob es noch funktionieren wird, wenn beide gleich sind. Sie können es testen und Ihre Ergebnisse veröffentlichen.
Hier ist ein Monkeyrunner-Skript, das Berührungen sendet und an eine Anwendung zieht. Ich habe dies verwendet, um zu testen, ob meine Anwendung schnelle, sich wiederholende Wischgesten verarbeiten kann.
# 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)
MonkeyDevice.DOWN_AND_UP
anstelle von verwenden 'DOWN_AND_UP'
. ( DOWN_AND_UP
ist die Standardeinstellung, damit Ihr Code immer noch funktioniert)
UP
Aktion neu
Verwenden Sie adb Shell-Befehle, um das Berührungsereignis zu simulieren
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
Wenn ich das klar verstehe, möchten Sie dies programmatisch tun. Anschließend können Sie die onTouchEvent- Methode von verwenden View
und eine MotionEvent
mit den von Ihnen benötigten Koordinaten erstellen .
Sie sollten den neuen Monkeyrunner ausprobieren . Vielleicht kann dies Ihre Probleme lösen. Sie geben zum Testen Schlüsselcodes ein, möglicherweise sind auch Berührungsereignisse möglich.
adb shell monkey
das monkeyrunner
, was ein anderes Werkzeug ist.
Bei der Verwendung von Monkey Script ist mir aufgefallen, dass DispatchPress (KEYCODE_BACK) nichts tut, was wirklich scheiße ist. In vielen Fällen liegt dies daran, dass die Aktivität das Schlüsselereignis nicht verwendet. Die Lösung für dieses Problem besteht darin, eine Mischung aus Monkey-Skript und ADB-Shell-Eingabebefehl in einer Sequenz zu verwenden.
1 Die Verwendung des Affenskripts ermöglichte eine hervorragende Zeitsteuerung. Warten Sie eine bestimmte Sekunde auf die Aktivität und es handelt sich um einen blockierenden AdB-Aufruf.
2 Wenn Sie schließlich den Eingabeschlüssel-Eingabeschlüsselereignis 4 senden, wird die laufende APK beendet.
Z.B
adb shell monkey -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
adb shell input keyevent 4