java - 如何在任何情况下(即使在打盹模式下)接收 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 似乎复制了我的“不工作状态”。那么有办法退出空闲模式吗?
解决方案
推荐阅读
- ajax - Laravel ajax POST 方法不允许
- c# - c# 4.7.2 在调试和从本机启动时在 clr.dll 中崩溃
- android - Android Studio .gradle xml 文件被删除
- html - 在选择选项时,如何获得HTML选择元素以显示与下拉列表中显示的选项时显示不同的元素?
- angular - 角
- sql-server - “INSERT INTO 中的语法错误”ms-access vb.net
- angularjs - 使用 ionic 3 从 API 进行跨平台资源共享
- java - Lucene 提交非常慢
- asp.net - Quartz.net 相同的作业在 asp.net 中同时执行两次
- c++ - C++17:unique_ptr 之间指针存储的区别
和 shared_ptr