首页 > 解决方案 > 如何在任何情况下(即使在打盹模式下)接收 FCM 通知并开始定期工作?

问题描述

我有 2 个 PeriodicWorker,我需要每 15 分钟(从 9:00 到 18:00)执行一次,并从 FCM 接收通知,并根据收到的通知与另一个工作者(oneTimeWorker)进行一些工作。

第一个问题是有时我没有收到任何通知(当我打开我的应用程序时,我会收到通知)。我使用的是数据消息而不是通知消息,因为我必须在收到通知时启动工作人员。这是对的吗?或者我应该使用“数据消息”并在通知中插入带有“标题”和“正文”的“通知”部分?

注意:我总是使用来自消息“数据”部分的标题和正文数据来显示通知。

我的信息是:

  return com.google.firebase.messaging.Message.builder()
            .setNotification(message.getTitle() != null && message.getBody() != null ? new Notification(message.getTitle(), message.getBody()) : null)
            .setToken(message.getToken())
            .setTopic(message.getTopic())
            .putAllData(setDataMap(message, projectId))
            .setAndroidConfig(AndroidConfig.builder()
                    .setPriority(Priority.HIGH)
                    .putAllData(setDataMap(message))
                    .build())
            .build();

关于周期性工作者,有一种方法可以“唤醒”智能手机并使其退出打盹模式?例如,使用每 4 小时安排一次的 alarmManager 是否可行?根据文档 alarmManager 应该在打盹模式下工作:

如果即使在打盹模式下也必须发出警报,您可以使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。

这是个好主意吗?

注意:只要我解决了这些问题,更多的电池消耗并不是一个严重的问题。

Edit1:我尝试使用以下方法进行一些测试:

adb shell dumpsys deviceidle force-idle

adb shell am set-inactive <my_package> true

deviceidle 似乎复制了我的“不工作状态”。那么有办法退出空闲模式吗?

标签: javaandroidfirebasefirebase-cloud-messaging

解决方案


推荐阅读