【发布时间】:2018-08-28 09:50:01
【问题描述】:
我一直在尝试弄清楚如何使用任何后台任务 API 来创建一个工作请求,该工作请求每天在运行 Android 8.0+ 的设备上的特定时间触发。 时间必须由用户在设备本地设置(意味着没有 GCM)。
这还可能吗?带有AlarmManager 的旧设备可以创造奇迹,但据我所知,当应用程序被强制停止时,所有待处理的意图都会被清除,所以现在不行了。
WorkManager 的PeriodicWorkRequest 不允许您设置开始工作的时间。我考虑创建一个延迟的OneTimeWorkRequest 并在它运行后安排下一个,但没有什么能确保工作能在我想要的时间运行。
Evernote 的 Android-Job 库与 DailyJob 也存在问题 (https://github.com/evernote/android-job/issues/318)。
欢迎提出任何建议/想法。
【问题讨论】:
-
如果您希望您的工作在 android 8 中的特定时间运行,请将 alarmManager 与 setInexact 结合使用。
-
@Dr.aNdRO 我试过了,但是当你“强制停止”应用程序时,待处理的意图消失了,应用程序不会唤醒。
-
当用户在本地设置时,您可以使用 FCM 进行调度,对吗?只有在这种情况下,如果您的目标 >=8,您将准时收到警报。由于 WorkManager 不会在那个特定时间设置警报,而是在它附近。
-
只没有涉及到服务器。仅在设备上运行的代码。 FCM 不是一种选择。
-
检查这个项目它做的一样。 github.com/cyph3rcod3r/Alliance 没有 FCM 并针对 android 8
标签: android alarmmanager android-jobscheduler android-8.1-oreo android-workmanager