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.

  • Cómo llamar a Button.performClick en Android JUnit test case?
  • Android Studio Gradle androidTest vs instrumentTest
  • PowerMock en el proyecto Android
  • ActivityUnitTestCase getActionBar () devuelve null
  • Ejecutar pruebas de unidad en Guardar con Android Studio
  • La falla de Android ActivityMonitor hace que getActivity () nunca vuelva
  • Prueba de unidad de Android con Retrofit / RxJava / Roboletric y Mockito
  • Cómo emular onLowMemory ()?
  • Prueba de unidad Actividad.startService () llamada?
  • TouchUtils con el emulador de Android
  • Robolectric: 3.3.2 - Ningún fichero de manifiesto: build \ intermedios \ manifestos \ lleno \ debug \ src \ main \ AndroidManifest.xml
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.