пример работы WorkManager android | Уведомления по времени

Задача:

Делаю приложение расписание, в котором уведомления должны отправляться за 5 минут до урока. В уведомление нужно передавать переменную урока и кабинета из SharedPreferences. Время уроков заранее известно, то есть например в 10:55 нужно отправить уведомление.

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

Если делать через WorkManager, то он же постоянно будет проверять время и нагружать телефон. А как использовать AlertManager, что бы он не работал от кнопки, а постоянно я так и не нашел.

Подскажите как правильно это реализовать при этом не используя сервер, тк. приложение должно работать исключительно на телефоне.


Ответы (1 шт):

Автор решения: iramm

Можно использовать 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 будет нагружать систему только при выполнении полезной работы, совмещенной с назначением его следующего срабатывания.

→ Ссылка