【问题标题】:Cancel notification when app is removed from recents(memory) list当应用程序从最近(内存)列表中删除时取消通知
【发布时间】:2019-11-27 15:11:53
【问题描述】:

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

注意:我尝试使用 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 行在应用程序终止时调用,而不是从最近删除中删除。我想这可能是个问题(我遗漏了一些东西)。

【问题讨论】:

  • 清除onDestroy() 中出现在最近列表中的任何Activity 的通知。持续的通知通常意味着服务,但不一定会在 Activity 被关闭时结束。
  • onDestroy() 从最近列表中删除时不会调用。

标签: android service notifications android-mediaplayer android-notifications


【解决方案1】:

使用以下代码取消通知:

NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

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

【讨论】:

  • 我只有一个通知。而且我没有寻求帮助来删除通知。当应用程序从用户滑动关闭应用程序的最近列表中删除时,我需要删除通知。没有方法被调用。并且通知没有关闭。
  • 当您在意图服务中将通知显示为前台时会发生这种情况。因此,您必须在终止服务时清除通知。
【解决方案2】:

终于找到解决办法了。

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

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

onBuildNotification():

startForeground(NOTIFICATION_ID, notification);

onRemovenotification():

 stopForeground(true);

【讨论】:

  • 当你的应用被杀死时如何运行这些代码。据我所知,onDestroy() 不能使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多