AlarmManager setRepeating игнорирует интервал - PullRequest
0 голосов
/ 14 февраля 2012

Я использую этот код для настройки будильника в нашем бизнес-приложении:

private void setupAlarm() {
    final Context c = getApplicationContext();
    final AlarmManager alarm = 
        (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
    final Intent i = new Intent(c, AlarmReceiver.class);
    final PendingIntent sender = 
         PendingIntent.getBroadcast(c, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
    final long startFromNow = System.currentTimeMillis()+10000;
    final long timer = 5*60*1000;
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, startFromNow, timer, sender);
}

Я не могу понять, почему интервал для тревоги не соблюдается. Первый сигнал тревоги запускается через 10 секунд (как и ожидалось), затем он срабатывает каждые 2 минуты и немного (от 122 секунд до 127 секунд), что неверно. Интервал 5 минут или я не прав?

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

Что может заставить AlarmManager действовать так по-другому? Я пытался:

  • используйте set(), а в приемнике будильника используйте другой set() более 5 минут: запуск через 2 минуты
  • используйте setInexactRepeating() вместо setRepeating(): запуск через 2 минуты

Любое понимание было бы полезно. Спасибо!

1 Ответ

2 голосов
/ 10 мая 2012

Немедленное предложение, которое приходит на ум - убедитесь, что вы не устанавливаете будильник с тем же намерением и другим значением в другом месте.Намерение не обязательно должно быть одним и тем же объектом, см. Документацию по установленным методам в AlarmManager.

...