Search code examples
androidalarmmanager

Android AlarmManager triggered immediately even with correct parameters?


I am setting an AlamManager from the onCreate of my main Activity.

Here is the method

public void scheduleAdsUpdateAlarm() {
    long THEE_HOURS = 3 * 60 * 60 * 1000;
    long THREE_MINUTES= 3*60*1000;
    long UNTIL_FIRST_TRIGGER = THREE_MINUTES;

    // Construct an intent that will execute the AlarmReceiver
    Intent intent = new Intent(getApplicationContext(), AdsUpdateAlarmReceiver.class);

    // Create a PendingIntent to be triggered when the alarm goes off
    final PendingIntent pIntent = PendingIntent.getBroadcast(this, AdsUpdateAlarmReceiver.REQUEST_CODE,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);

    if(alarm != null){
        alarm.cancel(pIntent);
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, UNTIL_FIRST_TRIGGER,
                THREE_MINUTES, pIntent);
    }
}

As you can see the alarm is set to run every three hours with the initial start after three minutes.

Problem is that the alarm goes off immediately when the onCreate and the following alarm setup is called. I don't understand what I am doing wrong?


Solution

  • alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, UNTIL_FIRST_TRIGGER,
    THREE_MINUTES, pIntent); 
    

    should be changed to:

    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + UNTIL_FIRST_TRIGGER, THREE_MINUTES, pIntent);
    

    since the second parameter in alarm.setInexactRepeating isn't a milliseconds from now value but an actual time value.