Detecta una nueva notificación de Android

En la aplicación de Android en la que estoy trabajando, me gustaría poder detectar cuándo aparece una nueva notificación de barra de estado, independientemente de si fue causada por mi aplicación. Para ser más específico, quiero contar el número de notificaciones en un marco de tiempo determinado.

¿Es esto posible, y si es así, cómo?

En realidad, es posible, lo uso en mi aplicación.

Para Android 4.2 y abajo:

Debe registrar un AccessibilityService y asegurarse de que el usuario habilite el servicio.

Ejemplo para un servicio:

public class InstantMessenger extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { //Do something, eg getting packagename final String packagename = String.valueOf(event.getPackageName()); } } @Override protected void onServiceConnected() { if (isInit) { return; } AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; setServiceInfo(info); isInit = true; } @Override public void onInterrupt() { isInit = false; } } 

Ejemplo para verificar si su Servicio está activado

Para Android 4.3 y superior:

Use la API de Notification Listener

La nueva API de Notification Listener en Android 4.3 le permite hacer esto.

Con esto, hay menos necesidad del hack de accesibilidad. También le permite descartar notificaciones.