2013-08-30 13 views
5

Ich habe eine Aktivität, die eine Benachrichtigung in der Benachrichtigungsleiste anzeigt. Wenn der Benutzer in den Hintergrund geht und die Home-Taste drückt, behalte ich die Benachrichtigung (das ist, was ich brauche), aber wenn der Benutzer die Anwendung schließt, muss ich die Benachrichtigung abbrechen, und das ist mein Problem.Benachrichtigung abbrechen, nachdem die Anwendung vom Hintergrund aus geschlossen wurde

  • Ich habe versucht, die Benachrichtigung auf onDestroy abzubrechen, aber es ist nicht gefeuert.
  • Ich habe versucht, setOngoing für die Benachrichtigung wahr zu setzen.

Wie könnte ich damit umgehen? Jedes Mal, wenn der Benutzer den Hintergrund verlässt und dann die App schließt, muss ich die Benachrichtigung aus der Benachrichtigungsleiste entfernen, aber wenn der Benutzer die Anwendung im Hintergrund behält, brauche ich die Benachrichtigung.

+0

Wie in dieser Antwort detailliert, es versuchen http://stackoverflow.com/a/11473952/1671933 – kabuto178

Antwort

3

Sie haben Ihre Benachrichtigung eine ID, wenn Sie es richtig erstellt?

so dann alles, was Sie tun müssen, ist diese ID verwendet es

zum Beispiel

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

auf zerstören abgefeuert abzubrechen, wenn sie aus Ihrer Anwendung zurück oder wenn Sie Anruf() auf Ihre Aktivität

+2

onDestroy nicht aufgerufen wird jedes Mal. Es ist Sache des Android-Systems, es anzurufen oder nicht. Ich benutze diesen genauen Code, um die Benachrichtigung abzubrechen, wenn onDestroy aufgerufen wird, aber es wird nicht jedes Mal aufgerufen. Was kann ich sonst noch tun? – user2494863

+0

Warum nicht 'onPause' verwenden – kabuto178

+0

wenn Sie auf eine Aktivität beenden onDestroy wird jedes Mal aufgerufen – tyczj

1

Ich erstellte eine asynchrone Aufgabe, die für immer ausgeführt wird und jetzt, wenn ich die Anwendung aus der aktuellen Liste entfernen, wird die onDestroy aufgerufen.

+0

Was haben Sie in async Aufgabe geschrieben, können Sie es posten? –

0

Die Benachrichtigung kann abgebrochen werden, wenn wir sie in der Methode onTaskRemoved() abgebrochen haben. Führen Sie in dieser Methode mNotificationManager.cancel (NOTIFICATION_ID) aus, da die onDestroy-Methode nicht jedes Mal aufgerufen wird. Es funktioniert gut für mich.

0

Sie müssen einen Dienst erstellen, dann Override diese Methode; und für Sicherstellen Kopie derselben onCreate Methode, weil der Dienst möglicherweise neu gestartet wird, wenn dies geschlossen ist.

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