How to schedule notifications using WorkManager?

前端 未结 4 1102
一个人的身影
一个人的身影 2020-11-29 08:24

I want to schedule a notification everytime the user add a note in the database for a specific time. While there are multiple ways to do it using AlarmManager, BroadcastRece

相关标签:
4条回答
  • 2020-11-29 09:14

    As ianhanniballake stated

    WorkManager isn't appropriate for work that needs to happen at a particular time.

    But this can be set in near future of the exact time, depending on the state of the battery optimization.

    An workaround will be like:

    // 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());
    
    0 讨论(0)
  • 2020-11-29 09:26

    You can show notification with the help of workmanager. Workmanger can be used for scheduling single occurrence task or periodic occurrence task as well as we can schedule task at a particular time.

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

    'delayedTime' -> calculate time when to trigger notification

    for more implementation details click here. To read more regarding workmanager click here

    0 讨论(0)
  • 2020-11-29 09:28

    WorkManager isn't appropriate for work that needs to happen at a particular time.

    You should use AlarmManager, and specifically AlarmManagerCompat.setExactAndAllowWhileIdle(), to get a callback at a specific time.

    0 讨论(0)
  • 2020-11-29 09:28

    According to the Android official documentation about worker manager: "These APIs let you create a task and hand it off to WorkManager to run immediately or at an appropriate time". In my app, I set a work to be activated 20 seconds after:

     // Schedule the time
     val request= OneTimeWorkRequestBuilder<YourWork>().setInitialDelay(20, TimeUnit.SECONDS).build()
        WorkManager.getInstance().enqueue(request)
    
    0 讨论(0)
提交回复
热议问题