多个以延迟为链的一次性工作请求



我正在制作一个应用程序药物提醒,它应该根据数据库中保存的日期和时间提醒药物消耗。 提醒应以通知的形式进行。 假设我有一种药物应该服用两次(例如在晚上 9:50 和晚上 9:55 进行快速测试(。单击按钮会触发通知。

我的问题 - 只会显示第一个通知,其他通知不会。

这是我的代码:

public void makeNotifications(Date now, String[] medicineNames, Date[] 
takingTime) {
WorkContinuation continuation = null;
for (int i = 1; i < medicineNames.length + 1; i++) {
Data.Builder dataBuilder = new Data.Builder()
.putString(MEDICINE_NAME_KEY, medicineNames[i - 1])
.putLong(MEDICINE_TAKING_TIME_KEY, takingTime[i - 1].getTime());
OneTimeWorkRequest.Builder requestBuilder =
new OneTimeWorkRequest.Builder(NotificationWorker.class)
.setInputData(dataBuilder.build());
if (i == 1) {
long diff = Math.abs(takingTime[i - 1].getTime() - now.getTime());
requestBuilder.setInitialDelay(diff, TimeUnit.MILLISECONDS);
continuation = mWorkManager.beginUniqueWork(
MEDICINE_NOTIFICATION_KEY,
ExistingWorkPolicy.KEEP,
requestBuilder.build());
} else {
long diff = Math.abs(takingTime[i - 1].getTime() - now.getTime());
requestBuilder.setInitialDelay(diff, TimeUnit.MILLISECONDS);
continuation.then(requestBuilder.build());
}
}
continuation.enqueue();
} 

您有任何建议/解释/解决方案吗?

WorkManager

不是您的用例的最佳解决方案,因为您需要在特定时间完成一些琐碎的工作。WorkManager将遵守低电耗模式条件,如果设备处于低电耗模式,则不会发布通知。

我建议您改用AlarmManager。使用setAndAllowWhileIdle()setExactAndAllowWhileIdle()警报管理器

根据文档:

标准 AlarmManager 警报(包括 setExact(( 和 setWindow((( 推迟到下一个维护时段。

  • 如果您需要设置在低电耗模式中触发的警报,请使用 setAndAllowWhileIdle(( 或 setExactAndAllowWhileIdle((。
  • 使用 setAlarmClock(( 设置的警报继续正常触发 — 系统在这些警报触发前不久退出打瞌睡模式。

相关内容

  • 没有找到相关文章

最新更新