¿Cómo simular un evento de toque en Android?

¿Cómo simular un evento táctil con Android mientras se dan las coordenadas X e Y manualmente?

El método de Valentin Rocher funciona si has ampliado tu vista, pero si estás usando un detector de eventos, usa esto:

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); 

Para obtener más información sobre la obtención de un objeto MotionEvent, aquí hay una excelente respuesta: Android: ¿Cómo crear un MotionEvent?

Aquí hay un script monkeyrunner que envía touch and drags a una aplicación. He estado utilizando esto para probar que mi aplicación puede manejar gestos repetitivos rápidos.

 # 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) 

Use comandos de shell de adb para simular el evento táctil

 **adb shell input tap xy** and also **adb shell sendevent /dev/input/event0 3 0 5 adb shell sendevent /dev/input/event0 3 1 29** 

Si entiendo claramente, usted quiere hacer esto programatically. A continuación, puede utilizar el método onTouchEvent de View y crear un MotionEvent con las coordenadas que necesita.

Usted debe dar el nuevo monkeyrunner ir. Tal vez esto puede resolver sus problemas. Usted pone los códigos de teclado en él para la prueba, quizás los acontecimientos del tacto son también posibles.

Al usar Monkey Script me di cuenta de que DispatchPress (KEYCODE_BACK) no está haciendo nada que realmente chupar. En muchos casos esto se debe al hecho de que la Actividad no consume el evento Clave. La solución a este problema es utilizar una mezcla de script de mono y comando de entrada de shell de adb en una secuencia.

1 El uso de script de mono proporcionó un gran control de tiempo. Espere una cierta cantidad de segundo para la actividad y es una llamada de bloqueo de adb.
2 Finalmente, el envío de la entrada de shell adb keyevent 4 finalizará el APK en ejecución.

P.EJ

Adb shell monkey -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
Adb shell input keyevent 4

MotionEvent se genera sólo tocando la pantalla.

  • Los gestos no funcionan cuando se utiliza DrawerLayout en la aplicación para Android
  • Reconocer números usando gestos
  • Almacene la orientación en una matriz y compare
  • Cómo implementar Swipe en Android juego sin vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.