Отправка локальных уведомлений в Android API 26 - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу запланировать простые локальные уведомления в своем приложении для 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...

Мои вопросы:

  1. Как я могу использовать простое BroadcastReceiver (вместо WakefulBroadcastReceiver) для отправки уведомления, гарантируя, что ЦП не работает весь процесс?
  2. Как я могу изменить свой код для выполнения тяжелой работы, которую сейчас выполняет фоновая служба?

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

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

1 Ответ

0 голосов
/ 20 ноября 2018

В итоге я использовал IntentJobService, поскольку он совпадает с Service для Pre-O и использует Jobs для Android O.

...