Comment simuler un événement tactile avec Android en donnant manuellement les coordonnées X et Y?
Réponses
Trop de publicités?La méthode de Valentin Rocher fonctionne si vous avez étendu votre vue, mais si vous utilisez un écouteur d'événements, utilisez ceci :
view.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
Toast toast = Toast.makeText(
getApplicationContext(),
"Vue touchée",
Toast.LENGTH_LONG
);
toast.show();
return true;
}
});
// Obtenir l'objet MotionEvent
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis() + 100;
float x = 0.0f;
float y = 0.0f;
// Liste des états meta trouvés ici: developer.android.com/reference/android/view/KeyEvent.html#getMetaState()
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(
downTime,
eventTime,
MotionEvent.ACTION_UP,
x,
y,
metaState
);
// Envoyer l'événement tactile à la vue
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 des touches et des glissements à une application. J'utilise ceci pour tester si mon application peut gérer des gestes de glissement répétés rapidement.
# Il s'agit d'un script monkeyrunner jython qui ouvre une connexion à un appareil Android
# et envoie continuellement une série de gestes de glissement et de toucher.
#
# Voir http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html
#
# utilisation: monkeyrunner swipe_monkey.py
#
# Importe les modules monkeyrunner utilisés par ce programme
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Se connecte à l'appareil actuel
device = MonkeyRunner.waitForConnection()
# Un glissement vers la gauche de (x1, y) à (x2, y) en 2 étapes
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):
# De temps en temps, injectez un toucher pour pimenter les choses!
if i % 9 == 0:
device.touch(x2, y, 'DOWN_AND_UP')
MonkeyRunner.sleep(pause)
# Glissement vers la droite
device.drag(start, end, duration, steps)
MonkeyRunner.sleep(pause)
# Glissement vers la gauche
device.drag(end, start, duration, steps)
MonkeyRunner.sleep(pause)
Vous devriez essayer le nouveau monkeyrunner. Peut-être que cela pourrait résoudre vos problèmes. Vous pouvez y mettre des codes clés pour les tests, peut-être que les événements tactiles sont également possibles.
Si je comprends bien, vous voulez faire cela de manière programmatique. Ensuite, vous pouvez utiliser la méthode onTouchEvent de View
, et créer un MotionEvent
avec les coordonnées dont vous avez besoin.