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
запуск вовремя.