I'm building an alarm application.I have successfully implemented basic alarm functions.
Calendar calendar = Calendar.getInstance();
calendar.set(calendar.HOUR_OF_DAY, sHour);
calendar.set(calendar.MINUTE, sMin);
calendar.set(calendar.SECOND, 0);
calendar.set(calendar.MILLISECOND, 0);
long sdl = calendar.getTimeInMillis();
Intent intent = new Intent(AlarmList.this, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(AlarmList.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager ALARM1 = (AlarmManager)getSystemService(ALARM_SERVICE);
ALARM1.set(AlarmManager.RTC_WAKEUP, sdl, sender);
in my application,user can select days(sunday,monday...) to repeat the alarm weekly. I'm trying to create multiple alarms to repeat weekly but don't know how to do it. can I create it using (repeate)interval or should I create multiple alarm managers?
From the docs:
Multiple
AlarmManagers
would not resolve your issue. If they have multiple different alarms (different times and different days), then you would need to set the alarm within theBroadcastReceiver
every time you fire off a previous alarm.You would also need to hold
RECEIVE_BOOT_COMPLETED
and have aBroadcastReceiver
to receive the boot so that if the phone is rebooted you can re-schedule your alarms.You need to use
different Broadcast id's
for thepending intents
. Something like this:Using the system time should be a unique identifier for every pending intent you fire.
To set multiple alarms you need to define your
Intent
each time so that it is distinguishable from the others. The easiest way I find to do this is to set thedata
field of yourIntent
something as follows:The rest of your code @Hassy31 is fine as is and remains unchanged.
Note that the
requestCode
parameter in thePendingIntent.getBroadcast()
method (as suggested by @parag) is unused according to the documentation so this ain't the right way to go about it.set Broadcast
id
for pendingIntent