Android 从最近(内存)列表中删除应用时取消通知

Android 从最近(内存)列表中删除应用时取消通知,android,service,notifications,android-mediaplayer,android-notifications,Android,Service,Notifications,Android Mediaplayer,Android Notifications,我正在使用一个显示持续通知的服务。当应用程序正常关闭时,通知将消失。但是,如果用户将其从最近的列表中删除,则应用程序将关闭并停止服务。但是,通知仍然出现。这不是一个好的用户体验 注意:我尝试了onTaskRemoved(),但根本没有调用它 当应用程序从最近的列表中删除时,我如何删除通知 更新: 我注意到,当应用程序从最近的应用程序中删除或从其他应用程序中删除时,会调用以下3行代码 11-27 11:44:05.097 3916-4157/? D/StatusBar: onNotificatio

我正在使用一个显示持续通知的服务。当应用程序正常关闭时,通知将消失。但是,如果用户将其从最近的列表中删除,则应用程序将关闭并停止服务。但是,通知仍然出现。这不是一个好的用户体验

注意:我尝试了onTaskRemoved(),但根本没有调用它

当应用程序从最近的列表中删除时,我如何删除通知

更新: 我注意到,当应用程序从最近的应用程序中删除或从其他应用程序中删除时,会调用以下3行代码

11-27 11:44:05.097 3916-4157/? D/StatusBar: onNotificationRemoved:  Key: 
0|com.example.player|888|null|10525


11-27 11:44:05.107 3916-3916/? D/PhoneStatusBar: removeNotification key=android.os.Binder@2e604ccc keyCode=778063052 old=StatusBarNotification(pkg=com.example.player user=UserHandle{0} id=888 tag=null score=0 key=0|com.example.player|888|null|10525: Notification(pri=0 contentView=com.example.player/0x109008a vibrate=null sound=null defaults=0x0 flags=0x2 color=0xff40444a category=service actions=3 vis=PUBLIC))


11-27 11:44:05.137 4759-4759/? I/Launcher.ApplicationsMessage: update com.example.player/ to null

但是,在我的应用程序中,这3行在应用程序终止时调用,而不是从最近删除。我想这可能是个问题(我遗漏了一些东西)。

使用以下代码取消通知:

NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
startForeground(NOTIFICATION_ID, notification);
 stopForeground(true);

在这段代码中,通知总是使用相同的id。如果您有不同的通知需要取消,您必须保存用于创建通知的ID。

最后,我找到了解决方案

我在生成通知时错过了启动前台服务

添加了这两行,并在应用程序从最近的列表中删除/被杀死时自动删除通知

onBuildNotification():

onRemovenotification():


我只有一个通知。我没有请求帮助删除通知。我需要删除通知时,应用程序是从最近的名单,这是用户刷关闭应用程序删除。没有方法被调用。并且通知未关闭。当您在intent服务中将通知显示为前台时,会发生这种情况。因此,在终止服务时必须清除通知。清除最近列表中出现的任何
活动的
ondestory()
中的通知。不过,正在进行的通知通常意味着一项服务,该服务不一定会在取消
活动时结束。当应用程序从最近事件列表中删除时,不会调用onDestroy()。当应用程序被终止时,如何运行这些代码。据我所知,onDestroy()不能使用。