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

Cancel notification when app is removed from recents(memory) list

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

注意:我尝试使用 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);

在此代码中,通知始终使用相同的 ID。如果您有不同的通知需要取消并且您必须保存用于创建通知的 ID。

终于找到解决办法了

我在构建通知时错过了启动前台服务。

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

onBuildNotification():

startForeground(NOTIFICATION_ID, notification);

onRemovenotification():

 stopForeground(true);