How to remove notification from notification bar programmatically in android?

AndroidNotificationsAndroid NotificationsAndroid Pendingintent

Android Problem Overview


Anybody have idea how can we remove notification from application programmatically which is called using Pending intent.

I have used to cancel notification using following method.

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

But problem is notification which fired already that are not removed from notification bar.

Thanks in advance...

enter image description here

Android Solutions


Solution 1 - Android

Maybe try this :

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

OR, you can also do this to cancel all notifications in given context:

notificationManager.cancelAll();

See this link to the documentation : NotificationManager

Solution 2 - Android

I believe the most RECENT and UPDATED 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 3 - Android

Notifications remain visible until one of the following happens:

The user dismisses the notification either individually or by using "Clear All" (if the notification can be cleared). The user clicks the notification, and you called setAutoCancel() when you created the notification. You call cancel() for a specific notification ID. This method also deletes ongoing notifications. You call cancelAll(), which removes all of the notifications you previously issued. If you set a timeout when creating a notification using setTimeoutAfter(), the system cancels the notification after the specified duration elapses. If required, you can cancel a notification before the specified timeout duration elapse

public void cancelNotification() {

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

Solution 4 - 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’.

Add to manifest:

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

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

After that use the broadcast receiver to trigger the clear all.

As per the above code to trigger the broadcast use;

getContext().sendBroadcast(new Intent("com.test.app"));

Solution 5 - Android

For those who used (via subclass) the Service class and run it using:

final Intent serviceIntent = new Intent(context, YourNotificationService.class);
ContextCompat.startForegroundService(context, serviceIntent);

you can close it like so:

context.stopService(new Intent(context, YourNotificationService.class));

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
QuestionJayeshkumar SojitraView Question on Stackoverflow
Solution 1 - AndroidAn-droidView Answer on Stackoverflow
Solution 2 - AndroidXenolionView Answer on Stackoverflow
Solution 3 - AndroidFakhriddin AbdullaevView Answer on Stackoverflow
Solution 4 - AndroidSamanthaView Answer on Stackoverflow
Solution 5 - AndroidMiko ChuView Answer on Stackoverflow