Search code examples
androidservicenotifications

How to remove all notifications when an android app (activity or service) is killed?


I have an app with an activity and an intent service running in the background.

There's also a notification which shows a progress bar with the progress of the background process (it's downloading a lot of files from a server).

The activity shows the download progress ( user can't meaningfully use the app before these assets are downloaded). When this activity is closed, the notification with the progress bar is shown.

My issue: When the application is killed via the "task manager" (accessible via right button on android 4.0, the one with the two rectangles), the notification is still there. But it's basically a zombie, because the service that used to update it is dead.

Put in a different way: How can I remove a (or all) notification(s) when my application is killed?


Solution

  • @See public void onTaskRemoved(Intent rootIntent). This is called if the service is currently running and the user has removed a task that comes from the service's application. If you have set ServiceInfo.FLAG_STOP_WITH_TASK flag then you will not receive this callback; instead, the service will simply be stopped.

    You can remove all notifications that your app has created with cancelAll():

    NotificationManager nManager = ((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE));
    nManager.cancelAll();
    

    According to the API docs, this will

    Cancel all previously shown notifications.

    in the same way that cancel(int id) does:

    Cancel a previously shown notification. If it's transient, the view will be hidden. If it's persistent, it will be removed from the status bar.