Я хочу запланировать простые локальные уведомления в своем приложении для Android.
Это работало нормально, когда я нацеливался на API 24, но, поскольку я должен перейти к последнему API, чтобы иметь возможность обновлять свое приложение, я должен изменить некоторые вещи в своем коде.
В настоящее время , я использую WakefulBroadcastReceiver
и простой Service
для отправки уведомления.
Каждый раз, когда я хочу отправить уведомление, я отправляю Intent
своему WakefulBroadcastReceiver
со всей информацией, а в методе onReceive
я создаю службу и вызываю startWakefulService(context, service);
.
WakefulBroadcastReceiver
гарантирует, что процесс не будет остановлен, а служба выполняет тяжелую работу в фоновом режиме, прежде чем запустить уведомление.
Но теперь с новыми фоновыми ограничениями из последних версий Android я не могу просто запустить службу, когда мое приложение находится в фоновом режиме, поэтому каждая попытка отправить уведомление приводит к сбою моего приложения: java.lang.IllegalStateException: не разрешено запускать службу: приложение находится в фоновом режиме .
Я также заметил, что WakefulBroadcastReceiver
устарело.
Когда будильник установлен:
Intent broadcastIntent = new Intent(context, NotifBroadcastReceiver.class);
// ...
alarmIntent = PendingIntent.getBroadcast(context, idNotification, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
millis, interval, alarmIntent);
При получении сигнала тревоги: (в классе NotifBroadcastReceiver)
// onReceive method
startWakefulService(context, service);
// the service then does the heavy job and fires the notification...
Мои вопросы:
- Как я могу использовать простое
BroadcastReceiver
(вместо WakefulBroadcastReceiver
) для отправки уведомления, гарантируя, что ЦП не работает весь процесс?
- Как я могу изменить свой код для выполнения тяжелой работы, которую сейчас выполняет фоновая служба?
Я читал о JobScheduler
, но, похоже, его нельзя использовать в этом случае, поскольку не может гарантировать, что он будет работать в точное время .
Уведомления являются очень важной частью моего приложения, поэтому, если они больше не запускаются, приложение практически бесполезно ...