14

我目前正在将应用程序转换为 Android O,并且我目前正在处理通知渠道。

我制作了具有不同重要性级别的不同通道,并且由于应用程序有一个前台服务必须一直运行,直到我们过渡到新架构(更面向推送),我考虑将通知放在一个具有其重要性的通道中设置为IMPORTANCE_MIN, 这样它就在那里,但它不会打扰用户,也不会在状态栏中放置图标。

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

在后台运行的服务的 Android 系统通知

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

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

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

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

4

1 回答 1

21

现在记录了这种行为: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 之间动态切换。有了频道,我们就不能再动态地改变重要性了,不得不删除那个特性。

于 2018-01-12T15:39:52.997 回答