【发布时间】:2016-08-22 09:07:36
【问题描述】:
我有一个应用程序可以监听电话通知并通过MessageApi 向 Android Wear 手表发送消息。除了一些搭载 Android 6 的设备,尤其是华为 Mate 8(看起来所有的华为 Android 6 都这样做)之外,一切都运行良好。
华为有自己的冻结应用后台处理(受保护的应用)的实现。从用户报告中,我确认我的应用在华为受保护的应用和 Android 6 的 Doze 模式下存在异常。该应用程序运行正常,但在显示关闭 15 分钟后,我的应用程序停止向连接的 Android Wear 手表发送消息。我的应用程序还可以记录收到的通知历史记录,15 分钟后什么都没有收到……直到手机显示屏打开并打开我的应用程序。之后,在手机显示屏关闭时应该到达的所有通知都会到达我的NotificationListenerService 实现并立即发送到手表。历史记录也证实了这一点。
任何想法如何为这些手机解决此问题,尤其是带有打瞌睡模式的 Android 6 的华为 Mate 8?
当设备处于打盹模式和/或应用处于待机模式时,NotificationListenerService 的正确行为是什么?
编辑
用户还确认他们的手机未处于省电模式,这也会影响后台应用程序及其服务。这个错误看起来像是华为独有的,因为没有 Nexus 用户报告过这个问题,而我的 OnePlus One with M 也没有这样做。 N 预览版也适用于 Nexus 设备。
编辑 2
我添加了一个可选的前台服务 (startForeground()),所以我的应用在通知中心有一个永久通知,因此我的应用应该被排除在每次电池优化之外。对于前台服务通知,我使用了NotificationCompat.PRIORITY_MIN 的优先级并添加了Notification.FLAG_ONGOING_EVENT 标志。这对华为手机有点帮助,但作用不大,现在延迟通知在屏幕打开后立即到达我的NotificationListenerService,而不是在打开我的应用程序后。我没有在我的NotificationListenerService 中使用startForeground(),而是在另一个Service 中使用,因为我无法控制它的生命周期。
【问题讨论】:
标签: android android-notifications wear-os android-doze android-appstandby