Уведомления в Android Oreo

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

В моем приложении я использую AlarmManager для запуска уведомления в определенный момент. Он отлично работает в Nougat и более ранних версиях, однако он никогда не срабатывает при тестировании на Oreo (и предположим, что он не будет работать и на Pie).

Я пробовал все, например, setExactAndAllowWhileIdle. Что, по мнению других пользователей, должно работать на Oreo, но у меня это не сработало. Я также узнал о WorkManager, однако люди рекомендовали не использовать его в производственных приложениях, поскольку он все еще находится в стадии бета-тестирования, и, по-видимому, также не рекомендуется, если вам нужно, чтобы задача выполнялась в действительно определенное время.

Я бы показал свой код, однако это просто AlarmManager с BroadcastReceiver, как и любой другой пример, который вы можете найти в Интернете.

Это действительно "ошибка" приложения для меня, и на данный момент я не знаю, что делать. Спасибо.

EDIT: AlarmManager работает в Android Oreo и выше, проблема была с уведомлениями. Начиная с Oreo, вам нужно настроить NotificationChannel, иначе уведомления никогда не появятся. Вот и все.


person Johnny Navarro    schedule 18.10.2018    source источник
comment
это происходит на всех устройствах или это относится, например, к телефоны самсунг?   -  person shelll    schedule 18.10.2018
comment
@shell Я пробовал это на своем телефоне Huawei, а также на AVD.   -  person Johnny Navarro    schedule 18.10.2018


Ответы (2)


Ключевым моментом является то, что вы должны использовать явные трансляции в случае Oreo.

Обсуждение с решением.

Документация.

person solikhver    schedule 18.10.2018
comment
спасибо, однако я уже работал с явными трансляциями. Ответ на мою проблему был в ссылке, которую вы дали. Проблема была с уведомлениями, а не с AlarmManager. - person Johnny Navarro; 19.10.2018

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
    alarmManager.setAlarmClock(new AlarmManager.AlarmClockInfo(d.getTime(), pendingIntent), pendingIntent);
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    alarmManager.setExact(AlarmManager.RTC, d.getTime(), pendingIntent);
else
    alarmManager.set(AlarmManager.RTC, d.getTime(), pendingIntent);

Метод setAlarmClock() работает в большинстве случаев. Даже если устройство находится в режиме ожидания, этот метод будет работать. .

Вы можете узнать больше о методе setAlarmClock() из здесь.

person Jaydip Kalkani    schedule 18.10.2018