AlarmManager не запускает повторную тревогу в нужное время - PullRequest
0 голосов
/ 30 мая 2019

Я занимаюсь разработкой приложения для устройств Android Lollipop и KitKat. Прикладная программа должна вызывать API через каждый заранее заданный интервал (на основе интервала, полученного от сервера). Я делаю это, используя AlarmManager класс. Но проблема в том, что он работает до тех пор, пока не остановится.

Скажем, например, если я настрою запуск будильника в 08:00 с интервалом в 30 минут, он будет работать до 11:00 (апрель), а затем будильник не сработает.

Если я установлю длинный интервал (например: 8 часов от текущего времени, проблема все еще та же, не повторная установка ни разу)

код

public void setRepeatedAlarm(Context context, int requestCode, long next, long interval, Intent intent) {
   PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
   AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
   am.setRepeating(AlarmManager.RTC_WAKEUP, next, interval, sender);
}

Вызов функции

AlarmHandleManager.get().setRepeatedAlarm(this, Constants.SchedulerRequestCodes.UPLOAD_LOG, date.getTime(), AlarmManager.INTERVAL_DAY, intent);

Дайте мне знать, если кто-нибудь сможет выяснить проблему. Вы видели ошибку, обнаруженную в lollipop в трекере ошибок Google, если это так, дайте мне знать, если есть какое-либо альтернативное решение для этого.

1 Ответ

0 голосов
/ 30 мая 2019

я не думаю, что это ошибка, так как она уже упоминалась в официальной документации

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

Примечание : сAPI 19, все повторяющиеся тревоги неточны.Если вашему приложению требуется точное время доставки, оно должно использовать одноразовые точные сигналы тревоги, каждый раз меняя расписание, как описано выше.Устаревшие приложения, для которых targetSdkVersion более ранний, чем API 19, будут по-прежнему обрабатывать все свои тревоги, включая повторяющиеся, как точные.

Примечание : Начиная с API 19 (Build.VERSION_CODES.KITKAT) доставка сигналов тревоги неточна: ОС будет сдвигать сигналы тревоги, чтобы свести к минимуму пробуждения и использование батареи.Существуют новые API для поддержки приложений, которые требуют строгих гарантий доставки;см. setWindow (int, long, long, android.app.PendingIntent) и setExact (int, long, android.app.PendingIntent).Приложения, для которых targetSdkVersion более ранний, чем API 19, будут по-прежнему видеть предыдущее поведение, при котором все тревоги доставляются точно по запросу.

...