Haga clic en la notificación de Android mediante programación

Soy la caja negra que prueba una aplicación usando el marco de Robotium . La aplicación sometida a prueba envía una notificación en la barra de estado cada vez que instalo una nueva aplicación. Me gustaría hacer clic en esa notificación, pero todavía no encontré una forma adecuada de hacerlo.

Cuando hago clic manualmente en una notificación, obtengo las logcat líneas logcat :

 I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.FrontActivity bnds=[0,38][240,86] (has extras) u=0} from pid -1 I/ActivityManager( 148): START {flg=0x14000000 cmp=com.test.package/.activity.ResultActivity u=0} from pid 8600 I/ActivityManager( 148): Displayed com.test.package/.activity.FrontActivity: +1s183ms I/ActivityManager( 148): Displayed com.test.package/.activity.ResultActivity: +744ms 

Sé que Robotium no puede probar 2 aplicaciones diferentes al mismo tiempo, así como sé que no se puede obtener la notificación de una aplicación externa.

También intenté obtener la intención pendiente y dispararla usando el siguiente código:

 Context context = this.getInstrumentation().getTargetContext().getApplicationContext(); String intentClassString = "com.test.package.activity.FrontActivity"; Class<?> intentClass = null; try { intentClass = Class.forName(intentClassString); } catch (ClassNotFoundException e) { e.printStackTrace(); } Intent intent = new Intent(context, intentClass); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_NO_CREATE); try { pendingIntent.send(); } catch (CanceledException e) { e.printStackTrace(); } 

La actividad realmente se muestra, pero es diferente de lo que obtengo invocándola manualmente. Creo que algo está mal en el contexto que paso, o la forma en que llamo la intención pendiente.

¿Alguna pista sobre este problema? ¿Hay una mejor manera de simular el clic en una notificación?

Puede activar el desplazamiento en la barra de notificaciones y pulsar evento en la notificación.

Referir órdenes:

 adb shell input swipe 100 500 400 100 1000 adb shell input tap 400 400 

Cambiando los argumentos que puede utilizar estos comandos.

Por favor encuentre un buen dicussion y algunas opciones en esta otra pregunta stackoverflow:
¿Puedo probar las notificaciones de la barra de estado utilizando el marco de pruebas de Android?

Puesto que ya tienes código para activar una intención, en lugar de intentar recrear lo que haría la llamada notify (), intenta agregar una actividad especial sólo para las pruebas que realmente llama notify () en la notificación.

La respuesta que Ranjith KP le dio contiene la solución. Tenga en cuenta que necesita el teléfono que está ejecutando la aplicación enraizada, ya que son comandos utilizados con privilegios de sudo.

Este es el código que está funcionando para mí. Primero extiende la barra de notificación (comando de desplazamiento), espera 1 segundo y finalmente toca la primera notificación en la lista. Modifique los parámetros del eje como desee.

 Process su = null; try { su = Runtime.getRuntime().exec("su"); su.getOutputStream().write("input swipe 270 010 270 900\n".getBytes()); Thread.sleep(1000); su.getOutputStream().write("input tap 200 200\n".getBytes()); su.getOutputStream().write("exit\n".getBytes()); su.waitFor(); } catch (Exception e) { e.printStackTrace(); } finally { if (su != null) { su.destroy(); } } 
  • Robotium. WaitForActivity () devuelve false para la actividad incrustada en TabHostActivity
  • Cómo manejar la actividad de la aplicación externa en android utilizando robotium
  • Cómo probar automáticamente onResume el comportamiento llamando onDestroy usando Robotium?
  • ¿Cómo resolver la excepción durante la construcción de la suite?
  • Enviar Tecla Intro usando robotium para pruebas de Android?
  • Continuar las pruebas de Android después de una excepción
  • Cómo probar dos actividades con Robotium
  • Cómo inyectar el evento de clic con Android UiAutomation.injectInputEvent
  • El módulo de prueba de instrumentos de gradación Android no ve las fuentes del proyecto principal
  • Robotium con Mockito o Easy Mock
  • Cómo generar informes para Android Automation
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.