2012-02-20 12 views
28

En la aplicación de Android en la que estoy trabajando, me gustaría poder detectar cuándo aparece una nueva notificación de la 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.Detectar una nueva notificación de Android

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

Respuesta

52

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

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; 
} 
} 

Example for checking if your Service is activated

+0

esto es genial. No lo sabía ¡Gracias! – koopaking3

+12

@Sean Nota: Para iniciar un 'AccesibilityService', el usuario debe abrir Configuración - Accesibilidad, habilitar Accesibilidad y luego habilitar por separado su servicio. En ese momento, se les presenta el siguiente mensaje: "Este servicio de accesibilidad puede recopilar todo el texto que escriba, incluidas las tarjetas de crédito de datos personales, excepto las contraseñas. También puede registrar las interacciones de la interfaz de usuario. . Utilizar...?" A menos que esté usando esto para uso personal o para un negocio, esto podría ser una gran confianza para los usuarios de Market. Solo quiero darle la imagen completa – koopaking3

+1

No significa que no deba usarlo, solo tenga en cuenta antes de comenzar a colocar el trabajo para construir su propio – koopaking3

19

El nuevo Notification Listener API en Android 4.3 le permite hacer esto.

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

+0

El detector de notificaciones no funciona completamente aún, por ejemplo, no puede recuperar el texto de una actualización de navegación de Google (siempre devuelve nulo). Lo que significa que la accesibilidad 'hack' sigue siendo útil – Fuzzy

+0

lo cambió a "menos necesidad" en lugar de "no es necesario" – thoutbeckers

+0

¿es posible * cambiar * las notificaciones de alguna manera? Quiero que las aplicaciones de ciertas aplicaciones no puedan ser descartadas por esa aplicación – squirrel

Cuestiones relacionadas