Android AlarmManager не работает на некоторых устройствах, когда приложение закрыто

Я пытаюсь запустить IntentService как таковой из AlarmManager setRepeating() каждые полчаса. Я хочу отправить широковещательную рассылку, от широковещательной службы к намерениям. В сервисе будет реализована некоторая функциональность.

Но сначала AlarmManager не запускается, пока приложение находится в закрытом состоянии.

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

Что делать, чтобы запустить будильник, даже если приложение закрыто?

Ответ 1

Из документации setRepeating():

Как и в случае API 19, все повторяющиеся сигналы тревоги неточны.

Кроме того, setRepeating() не работает с Doze.

Вы должны использовать точные аварийные сигналы (заданные с помощью соответствующего метода AlarmManager на основе уровня API устройства):

if (Build.VERSION.SDK_INT >= 23) {
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
            triggerTime, intent);
} else if (Build.VERSION.SDK_INT >= 19) {
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, intent);
} else {
    alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, intent);
}

И перепланировать их каждый раз, когда они срабатывают.

ПРИМЕЧАНИЕ. Как упоминалось в комментарии выше, некоторые производители (такие как Xiaomi или Huawei) могут реализовать определенные функции экономии заряда батареи, которые могут предотвратить срабатывание аварийных сигналов и не могут быть обойдены программно.

Ответ 2

Теперь устройства с деньгами поставляются с большей защитой в контексте потребления энергии от батареи. По умолчанию устройство поддерживает почти все приложения в режиме энергосбережения. Это означает, что в некоторых устройствах фоновая работа (Location, Alarm manager) не будет работать, как только вы выходите из приложения, в некоторых устройствах фоновые задачи не будут работать после предельного предела батареи (например, 13%). Поэтому вам нужно оставить свое приложение в этом режиме экономии заряда батареи, чтобы плавно запускать приложение даже в фоновом режиме. Вы можете сделать это для разных производителей, как..

1. Для Xioami

- > Перейти к аккумулятору → Питание → Заставка аккумулятора → ваше приложение Теперь выберите "Нет ограничений" (для настроек фона), затем "Разрешить" для "Фоновое местоположение"

- > Автозапуск приложения после загрузки → Перейти в приложение безопасности → Разрешения → Автоматический запуск и проверка вашего приложения

2. Для Samsung

- → Приложение Samsung Smart Manager для остановки фоновой работы через 3 дня, если вы не пришли в свое приложение. Поэтому отключите эту функцию для своего приложения. Перейдите в приложение → Аккумулятор → Деталь (вкладка экономии энергии приложения) → нажмите на свое приложение и выберите отключить

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

Ответ 3

для телефона Lenovo: -

вам нужно войти в настройку → приложение- > выбрать приложение- > снять флажок Ограничить, чтобы запустить

теперь он будет работать в фоновом режиме как убитое состояние

Ответ 4

Ниже приведенное поведение изменилось после полной зарядки. Ранее, после отключения энергосбережения для этого приложения, он показал, что батареи не активны и т.д., Но только после полной зарядки (из-за очень низкого состояния батареи) устройство работало так, как должно. Поэтому измените эти настройки для приложения, а затем выполните полную перезарядку (возможно, только после того, как ранее была разряжена батарея). Это может исправить.


ZTE Blade L110

Даже при отключенной батарее (Настройки → Аккумулятор → Параметры → Аккумуляторная батарея), а приложение отмечено как важное для сообщений (Настройки → Запрос и уведомление → Уведомления о приложении → имя приложения → Приоритет) как ни setExact, ни setAlarmClock запуск вовремя.