【问题标题】:How do i remove a foreground notification in Android Lollipop?如何在 Android Lollipop 中删除前台通知?
【发布时间】:2014-12-22 00:00:55
【问题描述】:

我希望停止/关闭媒体播放器服务的前台通知,这与 Google 对 Google 音乐的实施非常相似。

例如在 Google 音乐中,如果您正在播放音乐,则无法将通知滑开。但是,如果您暂停音乐,它可以。

这与在 Android 4.4 上的实现方式完全不同,在 Android 4.4 中,通知仅在您离开应用程序时启动,并在您返回应用程序时自行删除。考虑到服务有通知的要求,我看不出如何实现这一点。

任何帮助将不胜感激。

【问题讨论】:

    标签: android service notifications android-5.0-lollipop foreground


    【解决方案1】:

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

    您可以通过从您的Service 调用stopForeground()(称为startForeground())来移除您自己的前景Notification

    例如在 Google 音乐中,如果您正在播放音乐,则无法将通知滑开。但是,如果您暂停音乐,则可以将其滑开。

    据推测,他们正在根据音乐是否正在播放更新NotificationsetOngoing() 值。

    【讨论】:

    • 所以想法是,如果您回到应用程序中,那么在您实际使用该应用程序时就不需要运行通知? Google 在 Android Lollipop 中使用 Google Music 的做法有所不同,无论您是否在应用程序中,通知始终运行。我知道这可能是一件微不足道的事情,但在开发我的应用程序时我遇到了它并想更好地理解原因。并感谢您的回答,非常感谢。
    • @DumonKri:如果你的 UI 在前台,前台服务不会增加你的进程优先级。而且,如果您的 UI 位于前台,那么用户通过该 UI 与您的应用交互的方式可能比通过您的 Notification 更好。
    • 感谢@CommonsWare,这显然是有道理的。谷歌在 Android 4.4 和 5 的谷歌音乐中以不同的方式实现它的方式让我感到困惑。也许它会随着 Lollipop 应用程序的更新而改变。
    • setOnGoing() 如果是前台服务会被忽略
    • @CommonsWare 当我stopForeground() 时,音乐播放器暂停,几分钟后服务将被销毁。有什么办法可以避免吗?
    【解决方案2】:

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

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

    因此,第一个服务仍在前台运行,但由于停止了第二个服务,通知消失了。偶然发现的:)。

    【讨论】:

    • 这是一个很棒的技巧,但不幸的是它已在 Android 7.1 中进行了修补。
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多