NotificationManager.cancel (id) funktioniert nicht innerhalb eines Broadcast-Empfängers

7

Android: Ich versuche eine Benachrichtigung von der Benachrichtigungsleiste abzubrechen, nachdem ein Paket installiert wurde. Was ich mache ist folgendes:

%Vor%

wo

%Vor%

Aber das notificationhelper._completeNotificationManager.cancel(id) funktioniert nicht. Ich habe versucht, notificationhelper._completeNotificationManager.cancelAll(); zu benutzen und es funktioniert. Was mache ich falsch?

    
b.i 25.10.2012, 06:26
quelle

4 Antworten

15

Nach meiner Erfahrung können Sie nicht alle Benachrichtigungen mit einer bestimmten ID unabhängig vom Tag abbrechen.

Das heißt, wenn Sie zwei Benachrichtigungen wie folgt erstellen:

%Vor%

Dann wird notificationManager.cancel(SAME_ID) keines von beiden abbrechen! Ich vermute, dass dies daran liegt, dass das Feld "tag", wenn es in notify () und cancel () nicht angegeben ist, standardmäßig auf null gesetzt wird, was Sie explizit abbrechen müssen.

Um diese beiden Benachrichtigungen abzubrechen, müssen Sie Folgendes aufrufen:

%Vor%

In Ihrem Fall geben Sie "TEXT" als Tag an, löschen aber nur mit der ID, die standardmäßig "tag = null" verwendet.

Geben Sie also TEXT nicht als Tag an:

%Vor%

Oder, wenn Sie separate Benachrichtigungen benötigen und nicht wollen, dass sie sich gegenseitig überlisten, verfolgen Sie die aktiven Tags:

%Vor%

Ich wünschte, dass das, was Sie zu tun versuchen, unterstützt wurde, so wie es scheint.

    
spitzanator 15.11.2013 17:45
quelle
9

Nun, das ist wahrscheinlich an dieser Stelle irrelevant, aber es sollte hier gepostet werden, damit Leute wie ich, die sich mit dem gleichen Problem beschäftigen, die Lösung finden können.

Wenn NotificationManager.cancel() nicht funktioniert, versuchen Sie, die ID für die Benachrichtigung zu ändern.

%Vor%

Als ich NOTIFICATION_ID von 1 zu [RANDOM_NUMBER] änderte, fing es magisch an zu arbeiten. Ich nehme an, dass 1 irgendwie reserviert ist, obwohl es in keiner Dokumentation einen Hinweis gibt ...

Stellen Sie sicher, dass Sie die gleiche NOTIFICATION_ID zum Abbrechen verwenden:

%Vor%     
Stephen 29.08.2013 17:50
quelle
0

Ich hatte in letzter Zeit das gleiche Problem. Ich habe es geschafft, es zu lösen.

Also, was ich verstanden habe.

1) verwenden, um die ID, die im Grunde eine Zufallszahl ist zu benachrichtigen und diese gleiche ID an das Stück Code (reciever / Aktivität senden ...), wo Sie wollen, es zu löschen.

2) Bei der Verwendung von Tags scheint es für mich nicht zu funktionieren, da ich allen Benachrichtigungen ein Tag gab, aber mit einer eindeutigen ID. Es funktionierte nur beim ersten Tag. also habe ich es komplett vermieden, Tags zu verwenden. Wenn Sie Tags verwenden möchten, geben Sie eindeutige Tags zusammen mit der eindeutigen ID aus und verwenden Sie sie beide beim Abbrechen.

Also endgültige Antwort ... was ich benutzt habe und was für mich funktioniert:

%Vor%

Jetzt in der Aktivität, die durch meine Aktion geöffnet wird, klicken Sie auf, ich storniere die Benachrichtigung als:

%Vor%

Funktioniert jedes Mal jetzt.

    
Kushan 07.05.2017 19:07
quelle
0

Meine Benachrichtigungen wurden nicht entfernt, da mein Dienst Vordergrunddienst war und KEIN regulärer Dienst, der von StartService gestartet wurde.

Wenn Ihr Dienst Vordergrund ist, rufen Sie stopForeground(true) anstelle von stopself () auf. Jetzt sieht mein Code so aus:

%Vor%

und es funktionierte, Benachrichtigung wurde entfernt.

    
Ajji 20.02.2018 10:03
quelle