пример работы WorkManager android | Уведомления по времени
Задача:
Делаю приложение расписание, в котором уведомления должны отправляться за 5 минут до урока. В уведомление нужно передавать переменную урока и кабинета из SharedPreferences
. Время уроков заранее известно, то есть например в 10:55 нужно отправить уведомление.
Вопрос заключается в том, что не понимаю как сделать уведомления которые будут присылаться каждый день, каждый раз проверяя время.
Если делать через WorkManager
, то он же постоянно будет проверять время и нагружать телефон. А как использовать AlertManager
, что бы он не работал от кнопки, а постоянно я так и не нашел.
Подскажите как правильно это реализовать при этом не используя сервер, тк. приложение должно работать исключительно на телефоне.
Ответы (1 шт):
Можно использовать WorkManager
. Назначить ему работу по выводу уведомления в методе doWork()
класса, расширяющего Worker. Там же назначить новое срабатывание WorkManager
:
long millisLeftToNotification = timeForNextNotification.getTimeInMillis() - getNowMoment().getTimeInMillis();
OneTimeWorkRequest myWorkRequest = new OneTimeWorkRequest.Builder(NotificationWorker.class)
.setInitialDelay(millisLeftToNotification, TimeUnit.MILLISECONDS)
.build();
WorkManager
.getInstance(context.getApplicationContext())
.enqueueUniqueWork(WORK_NAME, ExistingWorkPolicy.REPLACE, myWorkRequest);
В этом случае WorkManager
будет нагружать систему только при выполнении полезной работы, совмещенной с назначением его следующего срабатывания.