【问题标题】:Is it possible to put a foreground service notification in a notification channel with IMPORTANCE_MIN?是否可以在具有 IMPORTANCE_MIN 的通知通道中放置前台服务通知?
【发布时间】:2017-08-03 13:21:24
【问题描述】:

我目前正致力于将应用程序转换为 Android O,并且我目前正致力于通知渠道。

我使用不同的importance levels 创建了不同的通道,并且由于应用程序有一个前台服务必须一直运行,直到我们过渡到新架构(更面向推送),我考虑将通知放在通道中它的重要性设置为IMPORTANCE_MIN,因此它存在,但不会打扰用户,也不会在状态栏中放置图标。

但是,当我这样做并将我的应用程序置于后台(使用 Home 或 Back 按钮)时,我会收到一条 Android 系统通知,告诉我我的应用程序正在后台运行,如下所示:

如果我更改频道并使其使用IMPORTANCE_LOW,问题就会消失,但通知会更加突出。

所以,我的问题是 - 有没有可能做我正在尝试的事情?我知道系统不允许开发人员这样做,因为如果您有前台服务,它应该对用户可见,但这只是一个猜测,我没有找到有关此的文档,这就是为什么我发布这个问题。

我的第二个问题是 - 在 O 之前,如果您将通知的优先级设置为 PRIORITY_MIN,您是否可以将该通知绑定到服务以使其成为前台服务,或者从一开始就不能这样做?

编辑:确认Android系统显示了重要频道IMPORTANCE_MIN的通知(感谢M66B),那么现在剩下的问题是为什么?有谁知道这背后的原因,或者可以在任何地方找到任何文档?这可能是一个应该报告给跟踪器的错误吗?

【问题讨论】:

  • 您的意思是,在 Android O 上,如果您仍然不针对 API 级别 26?因为,自 API 级别 26 起,优先级已被弃用,您需要改为创建具有重要性的通知通道,以便对通知进行排序。
  • 嘿,是的,我就是这么说的。因此,您尝试使用 IMPORTANCE_MIN 创建一个通知通道,并发出一个通知,该通知将进入该通道,然后将其绑定到服务以使其成为前台服务,并且当您的应用程序处于后台时(您的 UI 未打开屏幕),通知位于底部的通知阴影中,您没有收到来自 Android 系统的通知,我已发布了屏幕截图?
  • @M66B 如果您尚未亲自验证解决方案(或明确声明您尚未验证),请不要发布有关解决方案的 cmets。此外,请始终确保您已仔细阅读问题。请参阅:stackoverflow.com/help/how-to-answer 这里的问题是关于以 API 26 为目标的 Android O,在接下来的几个月中,越来越多的人会遇到这个问题。
  • @Anax 请注意,您需要卸载应用程序才能重新创建具有不同属性的通知通道。
  • 就我对“为什么?”的猜测而言,用户非常大声地表达了他们的观点,他们讨厌在他们背后跑来跑去的东西。例如,在 Android 4.x 时间范围内,Android 中存在一个错误,其中startForeground() 与有缺陷的Notification(例如,没有图标)会导致前景重要性但没有Notification。 Android 4.4(?)将行为更改为“修复”这样一个损坏的Notification,因此用户会知道前台服务。用户随后抱怨开发人员提供此类服务,而不是因为混乱状态栏。

标签: android notifications android-8.0-oreo foreground-service


【解决方案1】:

此行为现已记录在案:https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_MIN

最低通知重要性:仅在首屏下方的阴影中显示。 这不应该与 Service.startForeground 一起使用,因为 前台服务应该是用户关心的东西 将其通知标记为最小在语义上没有意义 重要性。如果您从 Android 版本 O 开始执行此操作,系统将 显示有关您的应用在 背景。

还有这里:https://material.io/guidelines/patterns/notifications.html#notifications-settings

在 Android O 中,通道默认的前景重要性级别 服务通知必须至少为 IMPORTANCE_LOW 才能显示 状态栏中的图标。

使用不太显眼的 IMPORTANCE_MIN 级别的频道将触发 在 IMPORTANCE_LOW 处来自 Android 的额外通知,指出 应用正在使用电池。

旁注: 这对我们来说是一个真正的痛苦,因为在 O 之前,当我们的前台通知没有有趣的信息要呈现时,我们曾经在 PRIORITY_DEFAULT 和 PRIORITY_MIN 之间动态切换。对于频道,我们无法再动态更改重要性,因此必须删除该功能。

【讨论】:

  • 非常感谢!我们有一个非常相似的功能,也不得不删除它。
  • 我猜答案是使用单独的通道来获取更高优先级的信息,并指导用户如何手动降低主要通知的可见性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多