¿Cómo simular un evento táctil 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 extendió su vista, pero si está usando un detector de eventos, use 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 respuesta excelente: Android: ¿Cómo crear un MotionEvent?

Aquí hay una secuencia de comandos monkeyrunner que envía toques y arrastra a una aplicación. He estado usando esto para probar que mi aplicación puede manejar gestos rápidos de barrido repetitivo.

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

utilice adb Shell Commands 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, quieres hacer esto programáticamente. Luego, podría usar el método onTouchEvent de View y crear un MotionEvent con las coordenadas que necesita.

Deberías darle una oportunidad al nuevo Monkeyrunner . Quizás esto puede resolver tus problemas. Colocas códigos de tecla para pruebas, tal vez los eventos táctiles también son posibles.

Cuando uso Monkey Script noté que DispatchPress (KEYCODE_BACK) no está haciendo nada que realmente apesta. En muchos casos, esto se debe a que la Actividad no consume el evento clave. La solución a este problema es usar una combinación de script mono y comando de entrada de shell adb en una secuencia.

1 El uso de la secuencia de comandos mono dio un gran control de tiempo. Espere una cierta cantidad de segundos para la actividad y es una llamada adb de locking.
2 Finalmente, el envío de la entrada del shell adb keyevent 4 finalizará la APK en ejecución.

P.EJ

adb shell monkey -p com.my.application -v -v -v -f /sdcard/monkey_script.txt 1
entrada de shell adb keyevent 4

MotionEvent se genera solo tocando la pantalla.