WakefulBroadcastReceiver не работает на устройствах Nougat и Oreo - PullRequest
0 голосов
/ 11 мая 2018

У меня есть приложение тревоги, которое устанавливает тревогу с помощью Alarm Manager. Как только сигнал тревоги сработает, он будет получен приемником, который запускает услугу бодрствования, которая обрабатывает сигнал тревоги и позволяет пользователю остановить или отложить сигнал тревоги.

ниже приведен фрагмент кода

public class AlarmReceiver extends WakefulBroadcastReceiver {

    @Override
    public void onReceive(Context context, final Intent intent) {
        Alarm alarm = intent.getParcelableExtra(Constants.ARGS_ALARM);
    }
}

Я получаю правильное значение в более старой версии Android, но на Nougat и Oreo получаем нулевую тревогу. Мое приложение поддерживает нуга minSdkVersion 17.

Что может быть не так в этом коде?

1 Ответ

0 голосов
/ 11 мая 2018

Цитируя себя из этого сообщения в блоге :

Код, который использовал пользовательские Parcelable объекты с AlarmManager, которые могли бы работать на более старых версиях Android , будетне работает на Android N .

Матиас Урхан указал [a] обходной путь: конвертируйте Parcelable в byte[] самостоятельно, сохраняя его в Bundle.Тогда процесс ОС будет воспринимать его как случайный byte[]. Этот ответ переполнения стека показывает технику.

Этот пример проекта также иллюстрирует эту технику.

...