Как удалить уведомление из панели уведомлений программно в android?

У кого-нибудь есть идея, как мы можем удалить уведомление из приложения программно, которое называется с помощью ожидающего намерения.

я использовал для отмены уведомления, используя следующий метод.

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

но проблема заключается в уведомлении, которое уже запущено, которое не удаляется из панели уведомлений.

спасибо заранее...

enter image description here

3 ответов


может попробовать так :

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

или вы также можете сделать это, чтобы отменить все уведомления в данном контексте:

notificationManager.cancelAll();

см. эту ссылку на документацию:NotificationManager


уведомления остаются видимыми, пока не произойдет одно из следующих событий:

пользователь закрывает уведомление, индивидуально или с помощью "очистить все" (если уведомление может быть отключен). Пользователь щелкает уведомление, и вы вызываете setAutoCancel() при создании уведомления. Вы вызываете cancel () для определенного идентификатора уведомления. Этот метод также удаляет текущие уведомления. Вы вызываете cancelAll (), который удаляет все ранее выданные уведомления. Если вы установите тайм-аут при создании уведомления с помощью setTimeoutAfter (), система отменяет уведомление по истечении указанного срока. При необходимости можно отменить уведомление до истечения указанного времени ожидания общественного недействительными cancelNotification() {

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

все уведомления (даже другие уведомления приложения) могут быть удалены с помощью прослушивания "NotificationListenerService", как указано в Реализация NotificationListenerService

в сервисе вы должны позвонить cancelAllNotifications().

служба должна быть включена для вашего приложения через "приложения и уведомления" - > "специальный доступ к приложению" - > "доступ к уведомлениям".

добавить в манифест:

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

затем в код;

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

после этого используйте широковещательный приемник для запуска очистить все.