Как планировать уведомления с помощью WorkManager? - PullRequest
0 голосов
/ 11 мая 2018

Я хочу планировать уведомление каждый раз, когда пользователь добавляет заметку в базу данных на определенное время. Хотя есть несколько способов сделать это с помощью AlarmManager, BroadcastReceiver и т. Д. Как это можно сделать с помощью WorkManager?

Ответы [ 4 ]

0 голосов
/ 16 апреля 2019

Вы можете показать уведомление с помощью workmanager. Workmanger может быть использован для планирования одной задачи вхождения или периодической задачи вхождения, а также для планирования задачи в определенное время.

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

'delayedTime' -> рассчитать время, когда следует активировать уведомление

для более подробной информации о реализации нажмите здесь . Чтобы узнать больше о workmanager нажмите здесь

0 голосов
/ 24 мая 2018

В соответствии с официальной документацией Android о менеджере работника: «Эти API позволяют создавать задачи и передавать их в WorkManager для запуска немедленно или в соответствующее время». В моем приложении я настроил активацию работы через 20 секунд после:

 // Schedule the time
 val request= OneTimeWorkRequestBuilder<YourWork>().setInitialDelay(20, TimeUnit.SECONDS).build()
    WorkManager.getInstance().enqueue(request)
0 голосов
/ 19 февраля 2019

как 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());
0 голосов
/ 13 мая 2018

WorkManager не подходит для работы, которая должна выполняться в определенное время.

Вы должны использовать AlarmManager, а именно AlarmManagerCompat.setExactAndAllowWhileIdle () , чтобы получить обратный вызов в определенное время.

...