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

前端 未结 5 1056
情书的邮戳
情书的邮戳 2020-12-31 09:20

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

相关标签:
5条回答
  • 2020-12-31 10:04

    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

    0 讨论(0)
  • 2020-12-31 10:12

    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.

    0 讨论(0)
  • 2020-12-31 10:16

    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();
    }
    
    0 讨论(0)
  • 2020-12-31 10:20

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

    0 讨论(0)
  • 2020-12-31 10:20

    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.

    0 讨论(0)
提交回复
热议问题