能否在IMPORTANCE_MIN通知渠道中放置前台服务通知?

15
我目前正在将一个应用程序转换为Android O,并且正在处理通知渠道。我创建了不同的渠道,具有不同的重要级别,由于应用程序具有必须一直运行的前台服务,直到我们过渡到新的架构(更加推送导向),因此我考虑将该通知放置在具有设置为IMPORTANCE_MIN的重要性的渠道中,这样它就在那里,但不会打扰用户,也不会在状态栏中放置图标。
然而,当我这样做时,并将我的应用程序放在后台(使用Home或Back按钮),我会收到一个Android系统通知,告诉我我的应用程序正在后台运行,如下所示:

Android System notification for a service running in the background

如果我更改频道并将其使用IMPORTANCE_LOW,问题就消失了,但是通知更加突出。
所以,我的问题是 - 我正在尝试的事情是否可能做到?我知道系统不允许开发人员这样做,因为如果您有前台服务,它应该对用户可见,但这只是一个猜测,并且我没有找到任何相关文档,这就是我发布这个问题的原因。
我的第二个问题是 - 在O之前,如果您将通知的优先级设置为PRIORITY_MIN,是否可以将该通知绑定到服务以使其成为前台服务,或者一直都不行?
编辑:确认Android系统显示具有重要性IMPORTANCE_MIN的通知的频道(感谢M66B),现在剩下的问题是为什么?有人知道背后的原因,或者能否在任何地方找到任何文档?这可能是应该报告给跟踪器的错误吗?

2
你的意思是,在Android O上,如果你仍然没有针对API级别26进行目标设置?因为自API级别26以来,优先级已被弃用,你需要使用重要性创建通知渠道,以便对通知进行排序。 - Anax
1
嘿,是的,那就是我说的。所以,你尝试使用IMPORTANCE_MIN创建了一个通知渠道,并创建了一个将进入该渠道的通知,然后将其绑定到服务以使其成为前台服务。当你的应用程序在后台运行时(你的UI不在屏幕上),通知会出现在底部的通知栏中,但你没有收到我发布截图的Android系统通知? - Anax
1
@M66B请不要在没有实际验证解决方案的情况下发布评论(或明确声明您没有这样做)。此外,请始终确保您仔细阅读了问题。请参见:https://stackoverflow.com/help/how-to-answer 这里的问题是针对使用API 26定位Android O的问题,这是越来越多的人在未来几个月中会遇到的问题。 - milosmns
1
@Anax 请注意,您需要卸载应用程序以使用不同属性重新创建通知渠道。 - M66B
1
就我猜测的“为什么?”而言,用户非常强烈地表达了他们讨厌背后运行的东西。例如,在Android 4.x时期,Android中存在一个错误,即使用有缺陷的“Notification”(例如没有图标)的“startForeground()”将导致前台重要性但没有“Notification”。 Android 4.4(?)更改了此类损坏的“Notification”的行为,以便用户可以了解前台服务。然后,用户抨击开发人员拥有这样的服务,对于在状态栏中混乱不堪的服务则不那么抨击。 - CommonsWare
显示剩余13条评论
1个回答

21

这种行为现在已经有文档记录了: https://developer.android.com/reference/android/app/NotificationManager.html#IMPORTANCE_MIN

Min通知重要性: 仅显示在阴影区域,折叠区域下方。 这不应与Service.startForeground一起使用,因为前台服务应该是用户关心的内容,因此将其通知标记为最低重要性在语义上没有意义。 如果您在Android O版本之后进行此操作,则系统将显示关于应用程序在后台运行的优先级更高的通知。

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

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

使用较不突出的IMPORTANCE_MIN级别的渠道将触发Android在IMPORTANCE_LOW时的额外通知,指出应用程序正在使用电池。

附注: 这对我们来说真是很痛苦,因为在O之前,当我们的前台通知没有有趣的信息要展示时,我们曾经在PRIORITY_DEFAULT和PRIORITY_MIN之间动态切换。由于渠道不能再动态更改IMPORTANCE了,因此我们不得不删除该功能。


1
非常感谢!我们曾经有一个非常相似的功能,也不得不将其删除。 - Anax
1
我想答案是使用一个单独的通道来传递高优先级信息,并告知用户如何手动降低主要通知的可见性。 - j__m

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