NotificationListenerService和Doze模式以及App Standby

she*_*lll 9 android android-notifications android-appstandby android-doze wear-os

我有一个应用程序,可以收听电话通知,并通过以下方式向Android Wear手表发送消息MessageApi.一些设备运行良好,除了Android 6的一些设备,特别是华为Mate 8(看起来像所有华为Android 6的这样做).

华为有自己的冻结应用程序后台处理(受保护的应用程序)的实现.从用户报告中我已经确认我的应用程序在华为的受保护应用程序和Android 6的打盹模式中都有例外.该应用程序工作正常,但在显示关闭15分钟后,我的应用程序停止向连接的Android Wear手表发送消息.我的应用程序还可以记录收到的通知历史记录,15分钟后没有任何内容...直到手机的显示屏打开并且我的应用程序打开.之后,在手机显示屏关闭时应该收到的所有通知都会进入我的NotificationListenerService实施并立即发送到手表.记录的历史也证实了这一点.

任何想法如何为这些手机解决这个问题,尤其是带有Doze模式的Android 6的华为Mate 8?

NotificationListenerService设备处于打盹模式和/或应用程序处于待机模式时的正确行为是什么?

编辑

用户还确认他们的手机未处于省电模式,这也会影响后台应用及其服务.这个bug看起来像华为独家,因为没有Nexus用户报告这个,我的OnePlus One和M也没有这样做.N预览也适用于Nexus设备.

编辑2

我添加了一个可选的前台服务(startForeground()),因此我的应用程序在通知中心有一个永久通知,因此我的应用程序应该从每个电池优化中排除.对于前台服务通知,我使用了优先级,NotificationCompat.PRIORITY_MIN并添加了Notification.FLAG_ONGOING_EVENT标志.这对华为手机有点帮助但不多,现在NotificationListenerService在打开我的应用程序后打开屏幕后,延迟通知就会到达我的右边.我不使用startForeground()in NotificationListenerService而是使用另一个Service因为我无法控制它的生命周期.

Nec*_*lef 0

直到看到你的帖子我才知道 Android 的 Doze 模式。然后我读了这篇文章,似乎这就是它应该如何工作!如果您想在打瞌睡模式期间收到通知,请尝试使用PRIORITY_HIGHPRIORITY_MAX作为您的通知优先级,但即使它有效,根据文章所述,它似乎也不是一个完整的解决方案。