NotificationManager.cancel() funktioniert nicht: Meldung nicht entfernt
Ich hab schon versucht das zu entfernen, eine permanente Benachrichtigung eingerichtet, die von einem Service mit:
startForeground(1337, notification);
Den code, den ich verwende, um es zu annullieren:
NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.cancel(1337); //cancel existing service notification, doesn't take effect
nManager.cancelAll(); //surpluous, but also doesn't take effect
Klären, warum ich das Tue: der Dienst beginnt mit einer Standard-persistente Benachrichtigung. Wenn meine app läuft, muss es ersetzt diese Benachrichtigung mit dem anderen. Mit notify()
auf die bestehenden Benachrichtigung funktioniert einwandfrei, allerdings brauche ich es, um zu zeigen, ticker-text für die neue Meldung als gut. Dies ist der Grund, warum ich beschlossen, entfernen Sie die vorhandene Meldung (mit dem code oben), eine neue erstellen, und dann rufe ich startForeground()
wieder, und übergeben Sie die neue Mitteilung, um Sie, so mein Service besteht.
- Sie versuchen zu entfernen, eine Meldung, die gestartet wurde von einer anderen Anwendung?
- Nein, es ist die gleiche Anwendung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sie die Erteilung der Benachrichtigung in einem indirekten Weg, indem Sie
startForeground()
. Man kann nicht einfach stornieren, die Benachrichtigung für den gleichen Grund das system besteht darauf, Sie eine Benachrichtigung beim Start ein Vordergrund-Service. So lange, wie Sie Ihre Vordergrund-Dienst ausgeführt wird, dass die Benachrichtigung wird da sein.In den meisten Fällen werden Dienstleistungen sollte wirklich nicht im Vordergrund. Wenn Sie mit der Priorität "normal" für Ihren Dienst, dann können Sie starten und stoppen Sie Ihre Benachrichtigungs-Regel.
Wenn Sie tatsächlich etwas tun, die wirklich nicht verlangen, ein Vordergrund-Dienst, und wenn Sie wirklich wollen, zeigen Sie dem Benutzer einen ticker-text, ich glaube, Ihre einzige option ist die Ausgabe eine weitere Benachrichtigung.
Können Sie immer entfernen Sie die Benachrichtigung von einem Vordergrund-service von callng stopForeground(boolean removeNotification). Dann wird ein Dienst beendet seine foregroundState und wieder getötet werden kann, indem das system, wenn der Speicher benötigt wird.
Könnten Sie aktualisieren Sie die Benachrichtigung, indem in eine leere Builder.