Как заменить устаревший WakefulBroadcastReceiver при планировании сигналов тревоги в приложении напоминаний? - PullRequest
0 голосов
/ 13 июня 2018

Вариант использования : я работаю над функцией приложения, которая позволяет пользователям настраивать еженедельные повторяющиеся напоминания в разное время / день, которые будут создавать уведомление при исполнении.Это напоминание нельзя пропустить, поэтому приложение должно будить телефон, даже если он находится в режиме ожидания.Код (основанный на ссылках, которые я указал ниже) сделан много лет назад, все работает отлично, но при нацеливании на новые 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, его забанят и ничего не происходит.

1 Ответ

0 голосов
/ 14 августа 2018

Это, кажется, распространенный случай использования, с которым я тоже борюсь.Единственный многообещающий ответ, который я нашел, - это комментарий ViciDroid по адресу https://www.reddit.com/r/androiddev/comments/71arjj/im_confused_about_android_o_and_task_execution/. По существу, ViciDroid предлагает: «Блокируйте пробуждение самостоятельно и выходите из обычного приемника вещания. В документах Google есть пример кода для PowerManager.так же, как вы должны были бы сделать это до того, как WakefulBroadcastReceiver стал чем-то особенным.

Также зарегистрируйте вашу трансляцию явно из-за неявного запрета на трансляцию. "

Я еще не пробовал, но этозвучит многообещающе - надеюсь, скоро попробую и доложу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...