Вариант использования : я работаю над функцией приложения, которая позволяет пользователям настраивать еженедельные повторяющиеся напоминания в разное время / день, которые будут создавать уведомление при исполнении.Это напоминание нельзя пропустить, поэтому приложение должно будить телефон, даже если он находится в режиме ожидания.Код (основанный на ссылках, которые я указал ниже) сделан много лет назад, все работает отлично, но при нацеливании на новые API я сталкиваюсь с проблемой ниже.
Проблема: WakefulBroadcastReceiver равен Устаревший .
Я пытался найти здесь "[android] AlarmManager jobscheduler WakefulBroadcastReceiver" или в Google, но не нашел ничего, что решило бы этот вопрос.
Я вижу сотни сообщений, в которых обсуждается вопрос об использовании AlarmManager и JobScheduler.Но я изо всех сил пытаюсь найти тех, у кого есть реальное планирование тревог для реализации приложения напоминаний.
То, что я вижу здесь , здесь , здесь и здесь - очень старые примеры решения этой проблемы.Но все полагаются на WakefulBroadcastReceiver.
Я полагаю, что какая-то альтернатива, такая как JobScheduler, должна заменить WakefulBroadcastReceiver, но, возможно, в моем случае использования нет необходимости.
Когда срабатывает тревога, я делаю следующее:
- с учетом входных параметров из намерения, поиск в области БД для модели
- , отображение уведомления
- установить следующий аварийный сигнал (снова запросит дб)
Могу я просто сделать это?
PendingIntent.getService(context, 30, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Где Intent - это простой IntentService (фактически тот, который вызывал WakefulBroadcastReceiver), которая делает всю работу в onHandleIntent.
Или мне нужно использовать какой-нибудь механизм для удержания WAKE_LOCK?
ОБНОВЛЕНИЕ 1 : Я только что натолкнулся на этот пост.Похоже, что есть вероятность, что то, что находится внутри onHandleIntent, не будет иметь достаточно времени для выполнения.Как узнать время у меня есть?
ОБНОВЛЕНИЕ 2 : Я успешно связал AlarmManager с JobScheduler, чтобы при срабатывании тревоги пользователя планировалось задание проверять БД в фоновом режиме и показывать уведомление, но при настройке API28, его забанят и ничего не происходит.