it-swarm.com.de

Wie entferne ich die Benachrichtigung programmgesteuert in Android?

Jeder hat eine Idee, wie wir die Benachrichtigung programmgesteuert aus der Anwendung entfernen können, die mit dem Pending-Intent aufgerufen wird.

Ich habe verwendet, um die Benachrichtigung mit der folgenden Methode abzubrechen.

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);

Problem ist jedoch die Benachrichtigung, die bereits ausgelöst wurde und nicht aus der Benachrichtigungsleiste entfernt wird.

Danke im Voraus...

enter image description here

52
Jayesh Sojitra

Vielleicht probier das mal aus: 

NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

ODER Sie können dies auch tun, um alle Benachrichtigungen in einem bestimmten Kontext abzubrechen:

notificationManager.cancelAll();

Siehe diesen Link zur Dokumentation: NotificationManager

155
An-droid

Benachrichtigungen bleiben sichtbar, bis einer der folgenden Fälle eintritt:

Der Benutzer lehnt die Benachrichtigung entweder einzeln ab oder verwendet "Alle löschen" (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 Abbruch auf () für eine bestimmte Benachrichtigungs-ID. 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 Timeout festlegen, bricht das System die Benachrichtigung nach dem ab Die angegebene Dauer ist abgelaufen. Bei Bedarf können Sie eine Benachrichtigung vor Ablauf der angegebenen Timeout-Dauer abbrechen

public void cancelNotification() {

    String ns = NOTIFICATION_SERVICE;
    NotificationManager nMgr = (NotificationManager) getActivity().getApplicationContext().getSystemService(ns);
    nMgr.cancel(NOTIFICATION_ID);
}

Alle Benachrichtigungen (auch andere App-Benachrichtigungen) können durch Abhören von 'NotificationListenerService' entfernt werden, wie unter NotificationListenerService Implementation erwähnt.

Im Service müssen Sie cancelAllNotifications() aufrufen.

Der Dienst muss für Ihre Anwendung über "Apps & Benachrichtigungen" -> "Spezieller Zugriff auf Apps" -> "Zugriff auf Benachrichtigungen" 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 Broadcast-Empfänger, um das Löschen aller auszulösen.

0
Samantha