如何使用WorkManager安排通知?

时间:2018-05-11 20:27:27

标签: android android-jetpack android-workmanager

我希望每当用户在特定时间内在数据库中添加注释时安排通知。虽然使用AlarmManager,BroadcastReceiver等有多种方法可以使用WorkManager来完成它?

4 个答案:

答案 0 :(得分:3)

WorkManager不适合需要在特定时间发生的工作。

您应该使用AlarmManager,特别是AlarmManagerCompat.setExactAndAllowWhileIdle()来获取特定时间的回调。

答案 1 :(得分:2)

根据有关工作经理的Android官方文档:“这些API允许您创建任务并将其交给WorkManager立即运行或在适当的时间运行”。在我的应用程序中,我将工作设置为在20秒后激活:

 // Schedule the time
 val request= OneTimeWorkRequestBuilder<YourWork>().setInitialDelay(20, TimeUnit.SECONDS).build()
    WorkManager.getInstance().enqueue(request)

答案 2 :(得分:1)

您可以在workmanager的帮助下显示通知。 Workmanger可用于安排单次发生任务或定期发生任务,也可以在特定时间安排任务。

OneTimeWorkRequest request= new OneTimeWorkRequest.Builder(CustomWorkerClass.class)
.setInitialDelay(delayedTime, TimeUnit.MILLISECONDS)
.addTag("TAG")
.build();

'delayedTime'->计算触发通知的时间

了解更多实施细节click here。 阅读有关工作经理click here

的更多信息

答案 3 :(得分:0)

ianhanniballake所述

  

WorkManager不适合需要在特定时间进行的工作。

但这可以在确切时间的将来设置,具体取决于电池优化的状态。

解决方法如下:

// Time to show notification at
LocalDateTime timeAt = LocalDate.now().atTime(20, 0);
LocalDateTime timeNow = LocalDateTime.now();

OneTimeWorkRequest.Builder workBuilder = new OneTimeWorkRequest.Builder(NotificationWorker.class);
// I just need to set an delay here
workBuilder.setInitialDelay(Duration.between(timeNow, timeAt));

// This is just to complete the example
WorkManager.getInstance().enqueueUniqueWork(UNIQUE_WORK_SHOW_NOTIFICATION,
                                    ExistingWorkPolicy.REPLACE,
                                    workBuilder.build());