Jeder hat eine Idee, wie wir Benachrichtigungen programmgesteuert aus der Anwendung entfernen können, die mit Pending Intent aufgerufen werden.
Ich habe die Benachrichtigung mit der folgenden Methode abgebrochen.
AlarmManager am=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(Display.this, TwoAlarmService.class);
PendingIntent pi = PendingIntent.getBroadcast(Display.this, AlarmNumber, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.cancel(pi);
Das Problem ist jedoch eine Benachrichtigung, die bereits ausgelöst wurde und nicht aus der Benachrichtigungsleiste entfernt wurde.
Danke im Voraus...
android
notifications
android-notifications
android-pendingintent
Jayeshkumar Sojitra
quelle
quelle
Antworten:
Vielleicht versuchen Sie Folgendes:
ODER Sie können dies auch tun, um alle Benachrichtigungen in einem bestimmten Kontext abzubrechen:
notificationManager.cancelAll();
Siehe diesen Link zur Dokumentation: NotificationManager
quelle
if (Context.NOTIFICATION_SERVICE != null)
weil das eine String-Konstante ist und niemals null sein wird.cancel(NOTIFICATION_ID)
odercancelAll()
den Trick gemacht hat. Falls Ihre Erinnerung so weit zurückgegangen ist, ist es keine große Sache :)Benachrichtigungen bleiben sichtbar, bis eine der folgenden Aktionen ausgeführt wird:
Der Benutzer schließt die Benachrichtigung entweder einzeln oder mit "Alle löschen" ab (wenn die Benachrichtigung gelöscht werden kann). Der Benutzer klickt auf die Benachrichtigung und Sie haben setAutoCancel () aufgerufen, als Sie die Benachrichtigung erstellt haben. Sie rufen cancel () für eine bestimmte Benachrichtigungs-ID auf. Diese Methode löscht auch laufende Benachrichtigungen. Sie rufen cancelAll () auf, wodurch alle zuvor ausgegebenen Benachrichtigungen entfernt werden. Wenn Sie beim Erstellen einer Benachrichtigung mit setTimeoutAfter () ein Zeitlimit festlegen, bricht das System die Benachrichtigung nach Ablauf der angegebenen Dauer ab. Bei Bedarf können Sie eine Benachrichtigung abbrechen, bevor die angegebene Zeitüberschreitungsdauer abgelaufen ist
public void cancelNotification() { String ns = NOTIFICATION_SERVICE; NotificationManager nMgr = (NotificationManager) getActivity().getApplicationContext().getSystemService(ns); nMgr.cancel(NOTIFICATION_ID); }
quelle
Alle Benachrichtigungen (auch andere App-Benachrichtigungen) können durch Abhören von 'NotificationListenerService' entfernt werden, wie in NotificationListenerService Implementation erwähnt
Im Service müssen Sie anrufen
cancelAllNotifications()
.Der Dienst muss für Ihre Anwendung über "Apps & Benachrichtigungen" -> "Spezieller App-Zugriff" -> "Benachrichtigungszugriff" aktiviert werden.
Zum Manifest hinzufügen:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:label="Test App" android:name="com.test.NotificationListenerEx" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService" /> </intent-filter> </service>
Dann im Code;
public class NotificationListenerEx extends NotificationListenerService { public BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { NotificationListenerEx.this.cancelAllNotifications(); } }; @Override public void onNotificationPosted(StatusBarNotification sbn) { super.onNotificationPosted(sbn); } @Override public void onNotificationRemoved(StatusBarNotification sbn) { super.onNotificationRemoved(sbn); } @Override public IBinder onBind(Intent intent) { return super.onBind(intent); } @Override public void onDestroy() { unregisterReceiver(broadcastReceiver); super.onDestroy(); } @Override public void onCreate() { super.onCreate(); registerReceiver(broadcastReceiver, new IntentFilter("com.test.app")); }
Verwenden Sie danach den Rundfunkempfänger, um das Löschen aller auszulösen.
Gemäß dem obigen Code, um die Broadcast-Verwendung auszulösen;
getContext().sendBroadcast(new Intent("com.test.app"));
quelle
Ich glaube, die aktuellste und aktualisierteste Vorgehensweise (Kotlin und Java) sollte wie folgt durchgeführt werden:
NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)
Oder alle Benachrichtigungen abzubrechen ist:
NotificationManagerCompat.from(context).cancelAll()
Gemacht für AndroidX oder Support-Bibliotheken.
quelle