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 backg
use in your notification builder the setTimeoutAfter
and then use a recursive call that starts a coroutine to refresh the notification before it cancels itself.
This way, if your service is killed (which won't go through onDestroy or receive any other callbacks to trigger cancellation of the notification) the notification simply times out for you. And the only way a service that is started + bound will be stopped is when the OS kills the application after being idle.
not using a foreground service also means that your normal application lifecycle won't be inhibited. It's tricky to get right, but doable.
see methods buildNotification
and notify
, and launchRefreshNotificationJob
from https://github.com/05nelsonm/TorOnionProxyLibrary-Android/blob/master/topl-service/src/main/java/io/matthewnelson/topl_service/notification/ServiceNotification.kt
You can not track if application is killed from Activity or Application class.
I found a solution for this in the following link : Cancel notification on remove application from multitask panel
Please try this.
Did you tried onStop ? It worked for me. I called cancelAll() in onStop. It closes all notification on removal of app from task Manager.
Note : But it also remove all notification when your app goes in background. In that case you can re invoke those notification using background process.
@Override public void onStop (){
super.onStop();
cancelAllNotification(getApplicationContext());
}
public static void cancelAllNotification(Context ctx) {
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager nMgr = (NotificationManager) ctx.getSystemService(ns);
nMgr.cancelAll();
}
@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.
It seems that
onTaskRemoved
of the Service DOES get called when the user kills the application task (by swiping out the app in the "task manager". I am able to remove the Notification from here.