2012-02-20 23 views
28

Nell'app per Android su cui sto lavorando, vorrei essere in grado di rilevare quando viene visualizzata una nuova notifica sulla barra di stato, indipendentemente dal fatto che sia stata causata dalla mia app. Per essere più specifici, voglio contare il numero di notifiche in un dato periodo di tempo.Rileva una nuova notifica Android

E 'anche possibile, e se sì, come?

risposta

52

In realtà, è possibile, lo uso nella mia app.

È necessario registrare un AccessibilityService e assicurarsi che l'utente abiliti il ​​servizio.

Esempio per un servizio:

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

questo è bello. Non lo sapevo. Grazie! – koopaking3

+12

@Sean Nota: per avviare un 'AccessibilityService', l'utente deve aprire Impostazioni - Accessibilità, abilitare Accessibilità, quindi abilitare separatamente il servizio. A questo punto, viene presentato il seguente messaggio: "Questo servizio di accessibilità può essere in grado di raccogliere tutto il testo digitato, incluse le carte di credito dei dati personali ad eccezione delle password. Può anche registrare le interazioni dell'interfaccia utente. Viene dall'applicazione xxx . Uso...?" A meno che tu non stia usando questo per uso personale o per un'attività commerciale, questa potrebbe essere una grande fiducia attendersi dagli utenti del mercato. Voglio solo darti l'immagine grande – koopaking3

+1

Non significa che non dovresti usarlo, devi solo essere consapevole prima di iniziare a lavorare per costruire il tuo – koopaking3

19

La nuova Notification Listener API in Android 4.3 permette di fare questo.

Con questo c'è meno bisogno dell'accessibilità. Permette anche di respingere le notifiche.

+0

Il listener delle notifiche non funziona ancora completamente, ad esempio non è possibile recuperare il testo da un aggiornamento di navigazione di Google (restituisce sempre null). Il che significa che l'accessibilità 'hack' è ancora utile – Fuzzy

+0

cambiato in "meno bisogno" invece di "non c'è bisogno" – thoutbeckers

+0

è possibile * cambiare * le notifiche in alcun modo? Voglio rendere le notifiche di una certa app non rimuovibili da quella applicazione – squirrel

Problemi correlati