98 votes

Comment simuler un événement tactile sur Android?

Comment simuler un événement tactile avec Android en donnant manuellement les coordonnées X et Y?

108voto

azdev Points 5691

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 ?

23voto

Warwick Points 119

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)

20voto

Arjun Prakash Points 61

Utiliser les commandes adb Shell pour simuler l'événement tactile

adb shell input tap x y 

et aussi 

adb shell sendevent /dev/input/event0 3 0 5 
adb shell sendevent /dev/input/event0 3 1 29

1voto

keyboardsurfer Points 7432

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.

1voto

Valentin Rocher Points 7524

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X