如何在Android Lollipop中移除前台通知?

8
我希望能够停止或解除与媒体播放器相关的服务前台通知,类似于谷歌音乐的实现方式。
例如,在谷歌音乐中,如果你正在播放音乐,则无法将通知滑动移除。但是如果你暂停了音乐,就可以将其移除。
这与Android 4.4上的实现完全不同,因为通知仅在您离开应用程序时启动,并在您返回应用程序时自动删除。考虑到服务必须具有通知的要求,我也看不出如何实现这一点。
任何帮助都将不胜感激。
2个回答

8
如何在安卓Lollipop中移除前台通知?
您可以通过从调用了 startForeground()Service 中调用 stopForeground() 方法来移除自己的前台 Notification
例如在Google音乐中,如果正在播放音乐,则无法滑动通知栏以移除通知。但是,如果暂停音乐,则可以将其滑动移走。
据推测,他们会基于音乐是否正在播放来更新 NotificationsetOngoing() 值。

所以这个想法是,如果你回到应用程序中,那么就没有必要运行通知,因为你实际上正在使用应用程序?在Android Lollipop中,Google以不同的方式处理Google Music,无论你是否在应用程序中,通知始终在运行。我知道这可能是一个微不足道的事情,但在开发我的应用程序时我遇到了它,并想更好地理解为什么。谢谢你的答案,非常感谢。 - Mike Scamell
2
如果您的UI在前台,前台服务不会增加您的进程优先级。而且,如果您的UI在前台,用户可能有更好的方式通过该UI与您的应用程序进行交互,而不是通过您的“通知”。 - CommonsWare
感谢@CommonsWare,这显然很有道理。是Google在Android 4.4和5中以不同的方式实现它自己在Google音乐中让我感到困惑。也许随着Lollipop应用程序的更新,这种情况会改变。 - Mike Scamell
4
如果是前台服务,setOnGoing()会被忽略。 - joelg
@CommonsWare,那么像Spotify和SoundCloud这样的音乐播放器应用程序如何在Service被销毁时解除通知呢?我猜他们调用了StopForeground()。我在这里写了一个问题:https://stackoverflow.com/questions/62353553/can-we-avoid-stopforeground-to-stop-service 你能给我一些指导吗? - Ali
显示剩余2条评论

5

您还可以以巧妙的方式删除通知:

  • 使用startForeground(1,new Notification()); 启动第一个服务
  • 使用startForeground(1,new Notification()); 启动第二个服务并立即停止它

结果是第一个服务仍在前台运行,但由于停止第二个服务,通知已经消失。我是意外发现这个方法的 :).


1
这是一个很棒的技巧,但不幸的是,在Android 7.1中已经被修补了。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接