2013-08-30 13 views
5

Ho un'attività che mostra una notifica sulla barra di notifica. Se l'utente passa allo sfondo premendo il pulsante Home tengo la notifica (è quello che mi serve), ma quando l'utente chiude l'applicazione devo cancellare la notifica e questo è il mio problema.Annulla notifica dopo l'applicazione viene chiusa dallo sfondo

  • Ho tentato di annullare la notifica su onDestroy ma non è stato attivato.
  • Ho provato a impostare setOngoing true per la notifica.

Come posso affrontare questo? Ogni volta che l'utente va in background e poi chiude l'app ho bisogno di rimuovere la notifica dalla barra di notifica, ma se l'utente mantiene l'applicazione in background ho bisogno della notifica.

+0

Come dettagliato in questa risposta, fare un tentativo http://stackoverflow.com/a/11473952/1671933 – kabuto178

risposta

3

hai la notifica un ID quando lo hai creato giusto?

così allora tutto ciò che dovete fare è utilizzare tale ID per annullarla

ad esempio

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.cancel(4); 

sul distruggere viene licenziato quando hanno di nuovo fuori della vostra app o se si chiama finitura() su la tua attività

+2

OnDestroy non è chiamato ogni volta. Spetta al sistema Android chiamarlo o meno. Sto usando questo codice esattamente per cancellare la notifica quando viene chiamato onDestroy, ma non viene chiamato ogni volta. Cos'altro posso fare? – user2494863

+0

perché non utilizzare 'onPause' – kabuto178

+0

quando si chiama finish su un'attività onDestroy viene chiamato ogni volta – tyczj

1

Ho creato un'attività asincrona che viene eseguita per sempre e ora quando rimuovo l'applicazione dall'elenco recente, viene chiamato onDestroy.

+0

cosa hai scritto nel task asincrono puoi pubblicarlo? –

0

La notifica può essere annullata se annullata nel metodo onTaskRemoved(), eseguire mNotificationManager.cancel (NOTIFICATION_ID) in quel metodo, perché il metodo onDestroy non viene chiamato ogni volta. Funziona bene per me.

0

È necessario creare un servizio, quindi Override questo metodo; e per garantire la stessa copia al metodo onCreate, perché il servizio può riavviarsi quando viene chiuso.

@Override 
public void onTaskRemoved(Intent rootIntent) { 
    super.onTaskRemoved(rootIntent); 
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.cancelAll(); 
} 
Problemi correlati