Comment simuler un événement tactile avec Android en donnant les coordonnées X et Y manuellement?)
La méthode de Valentin Rocher fonctionne si vous avez étendu votre vue, mais si vous utilisez un écouteur d'événement, utilisez ceci:
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);
Pour en savoir plus sur l'obtention d'un objet MotionEvent, voici une excellente réponse: Android: Comment créer un MotionEvent?
Voici un script monkeyrunner qui envoie une touche et traîne à une application. Je me sers de cela pour vérifier que mon application peut gérer des gestes de balayage rapides et répétitifs.
# 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)
utiliser les commandes de shell adb pour simuler l'événement tactile
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
Vous devriez donner au nouveau monkeyrunner un essai. Peut-être que cela peut résoudre vos problèmes. Vous y mettez des codes clés à des fins de test, peut-être que des événements tactiles sont également possibles.
Si je comprends bien, vous voulez le faire par programmation. Ensuite, vous pouvez utiliser la méthode onTouchEvent de View
et créer un MotionEvent
avec les coordonnées dont vous avez besoin.
En utilisant Monkey Script, j'ai remarqué que DispatchPress (KEYCODE_BACK) ne fait rien qui soit vraiment nul. Dans de nombreux cas, cela est dû au fait que l'activité ne consomme pas l'événement clé. La solution à ce problème consiste à utiliser un mélange de script monkey et de commande d'entrée adb Shell dans une séquence.
1 L'utilisation du script Monkey offre un excellent contrôle du minutage. Attendez une certaine quantité de seconde pour l'activité et est un appel bloquant adb.
2 Enfin, l'envoi de l'adb Shell d'entrée keyevent 4 mettra fin à l'APK en cours d'exécution.
PAR EXEMPLE
shell adb monkey -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
adb Shell input keyevent 4