Я тестирую свое приложение на бета-версии 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 и приоритетные сегменты. Однако уведомления не работают должным образом, даже если приложение находится на переднем плане.
Все, что мне здесь не хватает. Любая помощь очень ценится.
Вы проверили установку временных ограничений для использования приложения
Включите дополнительный код, например компоненты, которые получают и обрабатывают PendingIntent, и действия, выполняемые с его помощью.
Прочтите это может вам поможет developer.android.com/training/notify-user/channels
У меня точно такая же проблема. Вы что-нибудь нашли?
Как вы сами упомянули, вероятно, причиной является новая функция Резервные сегменты приложений управления питанием. В новой документации говорится:
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 с включенной опцией оптимизации батареи?
все равно не повезло, даже после отключения оптимизации батареи.
где ты это тестируешь? эмулятор или любое устройство?