How to clear a notification in Android

AndroidNotifications

Android Problem Overview


Is it possible to clear a notification programatically?

I tried it with the NotificationManager but its not working. Is there any other way I can do it?

Android Solutions


Solution 1 - Android

Use the following code to cancel a Notification:

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

In this code there is alway the same id used for notifications. If you have different notifications that need to be canceled you have to save the ids that you used to create the Notification.

Solution 2 - Android

From: http://developer.android.com/guide/topics/ui/notifiers/notifications.html

> To clear the status bar notification when the user selects it from the Notifications window, add the "FLAG_AUTO_CANCEL" flag to your Notification object. You can also clear it manually with cancel(int), passing it the notification ID, or clear all your Notifications with cancelAll().

But Donal is right, you can only clear notifications that you created.

Solution 3 - Android

Since no one has posted a code answer to this:

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. and if you already have flags, you can OR FLAG_AUTO_CANCEL like this:

notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;

Solution 4 - Android

Please try methods provided in NotificationManagerCompat.

To remove all notifications,

NotificationManagerCompat.from(context).cancelAll();

To remove a particular notification,

NotificationManagerCompat.from(context).cancel(notificationId);

Solution 5 - Android

Starting with API level 18 (Jellybean MR2) you can cancel Notifications other than your own via NotificationListenerService.

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}

...

private void clearNotificationExample(StatusBarNotification sbn) {
    myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}

Solution 6 - Android

 Notification mNotification = new Notification.Builder(this)

                .setContentTitle("A message from: " + fromUser)
                .setContentText(msg)
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.app_icon)
                .setContentIntent(pIntent)
                .build();

.setAutoCancel(true)

when you click on notification, open corresponding activity and remove notification from notification bar

Solution 7 - Android

If you are generating Notification from a Service that is started in the foreground using

startForeground(NOTIFICATION_ID, notificationBuilder.build());

Then issuing

notificationManager.cancel(NOTIFICATION_ID);

does not end up canceling the Notification, and the notification still appears in the status bar. In this particular case, you will need to issue

stopForeground( true );

from within the service to put it back into background mode and to simultaneously cancel the notifications. Alternately, you can push it into the background without having it cancel the notification and then cancel the notification.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);

Solution 8 - Android

I believe the most RECENT and UPDATED for AndroidX and backward compatibility. The best way of doing (Kotlin and Java) this should be done as:

NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)

Or to cancel all notifications is:

NotificationManagerCompat.from(context).cancelAll()

Made for AndroidX or Support Libraries.

Solution 9 - Android

If you're using NotificationCompat.Builder (a part of android.support.v4) then simply call its object's method setAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);

Some guys were reporting that setAutoCancel() did not work for them, so you may try this way as well

builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;

Note that the method getNotification() has been deprecated!!!

Solution 10 - Android

    // Get a notification builder that's compatible with platform versions
	// >= 4
	NotificationCompat.Builder builder = new NotificationCompat.Builder(
			this);
	builder.setSound(soundUri);
	builder.setAutoCancel(true);

this works if you are using a notification builder...

Solution 11 - Android

   String ns = Context.NOTIFICATION_SERVICE;
  NotificationManager Nmang = (NotificationManager) getApplicationContext()
                                                     .getSystemService(ns);
  Nmang .cancel(getIntent().getExtras().getInt("notificationID"));

Solution 12 - Android

Actually as answered before starting with API Level 18 you can cancel Notifications posted by other apps differet than your own using NotificationListenerService but that approach will no longer work on Lollipop, here is the way to remove notifications covering also Lillipop API.

if (Build.VERSION.SDK_INT < 21) {
	cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
	cancelNotification(sbn.getKey());
}

Solution 13 - Android

All notifications (even other app notifications) can be removed via listening to 'NotificationListenerService' as mentioned in https://stackoverflow.com/questions/17926236/notificationlistenerservice-implementation

In the service you have to call cancelAllNotifications().

The service has to be enabled for your application via:

‘Apps & notifications’ -> ‘Special app access’ -> ‘Notifications access’.

Solution 14 - Android

this code worked for me:

public class ExampleReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

    int notificationId = 1;
    notificationManager.cancel(notificationId);
  }
}

Solution 15 - Android

A function written in Kotlin:

/**
 * Delete the notification
 */
fun delete(context: Context, notificationId: Int) =
    with(NotificationManagerCompat.from(context)) {
        cancel(notificationId)
    }

Or shorter:

fun delete(context: Context, notificationId: Int) = NotificationManagerCompat.from(context).cancel(notificationId)

Solution 16 - Android

If you use OneSignal, you must use one of this:

Specific notification:

OneSignal.removeNotification(mutableNotification.androidNotificationId)

All notifications:

OneSignal.clearOneSignalNotifications()

In OneSignal's java doc says:

For removeNotification

Cancels a single OneSignal notification based on its Android notification integer ID. Use
* instead of Android's {@link NotificationManager#cancel(int)}, otherwise the notification will be restored
* when your app is restarted.

For clearOneSignalNotifications

If you just use
* {@link NotificationManager#cancelAll()}, OneSignal notifications will be restored when
* your app is restarted.

Solution 17 - Android

To clear notifications on Oreo and greater versions

//Create Notification
     Notification.Builder builder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID)
                        .setContentTitle(getString(R.string.app_name))
                        .setAutoCancel(true);
    
                Notification notification = builder.build();
                NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                createNotificationChannel(builder, notificationManager);
                mNotificationManager=notificationManager;
                startForeground(1, notification);


    //Remove notification
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    mNotificationManager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
                }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionrahulView Question on Stackoverflow
Solution 1 - AndroidJanuszView Answer on Stackoverflow
Solution 2 - AndroidChuck C.View Answer on Stackoverflow
Solution 3 - AndroidNPikeView Answer on Stackoverflow
Solution 4 - AndroidRohit SutharView Answer on Stackoverflow
Solution 5 - AndroidJim VitekView Answer on Stackoverflow
Solution 6 - AndroidNeeraj SinghView Answer on Stackoverflow
Solution 7 - AndroidIanGoughView Answer on Stackoverflow
Solution 8 - AndroidXenolionView Answer on Stackoverflow
Solution 9 - AndroidsandaloneView Answer on Stackoverflow
Solution 10 - Androiduser2962552View Answer on Stackoverflow
Solution 11 - AndroidDhina kView Answer on Stackoverflow
Solution 12 - AndroidAlejandro CasanovaView Answer on Stackoverflow
Solution 13 - AndroidSamanthaView Answer on Stackoverflow
Solution 14 - AndroidWilsonView Answer on Stackoverflow
Solution 15 - AndroidYektaDevView Answer on Stackoverflow
Solution 16 - AndroidMeteView Answer on Stackoverflow
Solution 17 - AndroidSumedh UlheView Answer on Stackoverflow