Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is my AlarmManager firing off instantly?

I'm trying to build an alarm application. I had the alarm working before and I was able to set the different times and the alarm would go off appropriately. I then changed the layout of the ChangeAlarmActivity to a TableLayout and now it won't work? I didn't touch the code. Here is how I set the alarm:

Intent alarmIntent = new Intent(ChangeAlarmActivity.this, AlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(ChangeAlarmActivity.this, (int)alarm.getID(),
        alarmIntent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
System.out.println("Alarm time: " + hour + ":" + min);
Calendar alarmCal = Calendar.getInstance();
//alarmCal.setTimeInMillis(System.currentTimeMillis());
alarmCal.set(Calendar.HOUR_OF_DAY, hour);  
alarmCal.set(Calendar.MINUTE, min);        
//alarmCal.set(Calendar.SECOND, 0);

alarmManager.set(AlarmManager.RTC_WAKEUP,
        alarmCal.getTimeInMillis(),
        pendingAlarmIntent);
like image 648
Johnathan Au Avatar asked Nov 30 '22 21:11

Johnathan Au


1 Answers

Possibly because your hour and minute are in the past.

Let's say that it is 16:07 hours (using 24 hour time) in your current time zone, and you execute this code with hour as 3 and min as 27. 03:27 was in the past, and hence the alarm fires immediately.

After making your two set() calls, see if the time is earlier than now, and if so, add() one day.

like image 77
CommonsWare Avatar answered Dec 03 '22 12:12

CommonsWare