Cómo corregir la excepción de permiso INJECT_EVENT al enviar toques a una prueba de ActivityInstrumentationTestCase2

Aunque hay muchos ejemplos que muestran que algo como esto debería funcionar, el código siguiente falla. Este código vive en un proyecto de prueba que está asociado con el proyecto real.

public class MyTest extends ActivityInstrumentationTestCase2<MyActivity> { public MyTest(String name) { super("com.mypackage.activities", MyActivity.class); setName(name); } public void testTap() throws Throwable { //Required by MotionEvent.obtain according to JavaDocs long downTime = SystemClock.uptimeMillis(); long eventTime = SystemClock.uptimeMillis(); Instrumentation i = getInstrumentation(); //Setup the info needed for our down and up events to create a tap MotionEvent downEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, 300, 20, 0); MotionEvent upEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 300, 20, 0); //Send the down/up tap event i.sendPointerSync(downEvent); i.sendPointerSync(upEvent); //Delay to see the results Thread.currentThread().sleep(3000); } } 

Esto lanza una java.lang.SecurityException: Inyectar a otra aplicación requiere el permiso INJECT_EVENTS en las llamadas i.sendPointerSync (). También he intentado view.onTouchEvent (event) y view.dispatchTouchEvent (event) sin éxito.

Lo único que puedo pensar es si los ejemplos donde esto está trabajando viven en el proyecto que está siendo probado. Esto parece malo porque la recomendación es separar las pruebas a un proyecto diferente y poder ejecutarlas desde un servidor de compilación con algo así como:

 adb -e shell am instrument -w com.mypackage.activities.test/android.test.InstrumentationTestRunner 

Esto probablemente significa que su proyecto principal, el proyecto de prueba o las versiones de su emulador están fuera de sincronización.

Podría ayudar a otros.

El problema que tenemos es

Error al realizar el gesto. Java.lang.SecurityException: Inyectar a otra aplicación requiere el permiso INJECT_EVENTS (RuntimeError ")

En mi caso, el problema era con el

La red no está conectada

. Una vez resuelto el problema de la conexión de red, se están ejecutando las pruebas.

  • Problemas con la ejecución de pruebas de unidad de actividad de Android desde Eclipse
  • Android prueba: cómo comprobar un diálogo se muestra en la pantalla? (mediante ActivityInstrumentationTestCase2)
  • ActivityInstrumentationTestCase2 vs ActivityTestRule
  • Prueba de unidad de actividad
  • Prueba de unidad en Android Studio: error "no escarnecido"
  • Android compartió código generado entre test y androidTest
  • Pruebas Robolectric que se ejecutan en Android Studio pero no en la línea de comandos
  • Utilice @Ignore en AndroidTestCase
  • Prueba de unidad de ciclo de vida de actividad
  • Crear proyecto de prueba de android en intellij idea 13 community edition
  • Autogenerar stubs de prueba de unidad en Android studio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.