Android P Beta - Уведомления AlarmManager не работают

Я тестирую свое приложение на бета-версии 4 Android P. targetSdkVersion - 27 моего приложения

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

           if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
                alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
            } else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
            } else {
                alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmIntentBuilder.buildPendingIntent(context, uri));
            }

Я тестировал ту же логику на Android 8.0, но она работает нормально. В Android 9.0 уведомления работают, но иногда совсем не работают. Кроме того, если они работают, они неточны и занимают слишком много времени, и это происходит, даже если приложение находится на переднем плане.

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

Я проверил документы Android P API, но не нашел ссылки, которая влияет на работу AlarmManager и уведомлений. Единственное, что, как мне кажется, вызывает проблему, - это Управление питанием в Android P и приоритетные сегменты. Однако уведомления не работают должным образом, даже если приложение находится на переднем плане.

Все, что мне здесь не хватает. Любая помощь очень ценится.

где ты это тестируешь? эмулятор или любое устройство?

Jitesh Mohite 22.08.2018 04:54

Вы проверили установку временных ограничений для использования приложения

Amjad Khan 26.08.2018 14:51

Включите дополнительный код, например компоненты, которые получают и обрабатывают PendingIntent, и действия, выполняемые с его помощью.

Larry Schiefer 27.08.2018 02:36

Прочтите это может вам поможет developer.android.com/training/notify-user/channels

Coeus.D 27.08.2018 11:20

У меня точно такая же проблема. Вы что-нибудь нашли?

diAz 31.07.2019 16:58
8
5
4 899
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Как вы сами упомянули, вероятно, причиной является новая функция Резервные сегменты приложений управления питанием. В новой документации говорится:

If an app is in the frequent bucket [or below], the system imposes stronger restrictions on its ability to run jobs and trigger alarms

а также

In particular, the bucket determines how frequently the app's jobs run, how often the app can trigger alarms

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

Стоит отметить, что похоже, что ваша корзина основана на среднем использовании (и машинном обучении) нет при текущем использовании - это означает, что даже если ваше приложение только что было на переднем плане, корзины играют некоторую роль.

Ответ принят как подходящий

Это происходит из-за функции Управление энергопотреблением, представленной в Android Pie.

В Android P введены строгие ограничения для приложений, работающих в фоновом режиме. Эти ограничения объясняются здесь

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

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

Кроме того, тестирование уведомлений путем изменения даты и времени устройства было хаком, который до сих пор работал нормально, но в Android P мы должны либо протестировать их в сценарии в реальном времени, либо отключить оптимизацию батареи для нашего приложения, чтобы протестировать их.

Надеюсь, это развеет наши сомнения.

@Amrut, спасибо за информацию. Есть ли какое-либо решение для получения уведомления о тревоге в android P с включенной опцией оптимизации батареи?

VIISHRUT MAVANII 20.12.2019 07:24

все равно не повезло, даже после отключения оптимизации батареи.

Narendra Singh 26.04.2020 19:12

Другие вопросы по теме