I have almost finished a little alarm application in Android, it works fine, however, right now it only works to setup an alarm only for one day, but the design has been made to select different days, for example (monday, wednesday, friday). This is the way I setup the alarm:
Calendar cal = Calendar.getInstance();
//tPicker is a TimePicker
cal.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour());
cal.set(Calendar.MINUTE, tPicker.getCurrentMinute());
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent(this));
//pIntent method
public static PendingIntent pIntent(Context context){
Intent intent = new Intent();
intent.setAction("myAlarm.intent.action.CLOCK");
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
It works great as I said, but I don't know how to setup an alarm for each day I select in the application, I would appreciate your help, thank you!
You need to set the alarm manager 3 times (in case monday, wednesday and friday are selected).
Code stolen from https://stackoverflow.com/a/19298186/2829009:
cal1.set(Calendar.DAY_OF_WEEK,2); //monday
cal2.set(Calendar.DAY_OF_WEEK,4); //wednesday
cal3.set(Calendar.DAY_OF_WEEK,6); //friday
and then set the an alarm manager for every day:
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal1.getTimeInMillis(), pIntent(this));
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), pIntent(this));
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal3.getTimeInMillis(), pIntent(this));
Edit:
private static final MONDAY = 2;
private static final WEDNESDAY = 4;
private static final FRIDAY = 6;
Calendar calMonday = Calendar.getInstance();
//tPicker is a TimePicker
calMonday.set(Calendar.HOUR_OF_DAY, tPicker.getCurrentHour());
calMonday.set(Calendar.MINUTE, tPicker.getCurrentMinute());
calMonday.set(Calendar.SECOND, 0);
calMonday.set(Calendar.MILLISECOND, 0);
//now copy you calendar for the other days
Calendar calWednesday = calMonday.clone();
Calendar calFriday = calMonday.clone();
//set week days
calMonday.set(Calendar.DAY_OF_WEEK, MONDAY);
calWednesday.set(Calendar.DAY_OF_WEEK, WEDNESDAY);
calFriday.set(Calendar.DAY_OF_WEEK, FRIDAY);
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, calMonday.getTimeInMillis(), pIntent(this, MONDAY));
alarmMgr.set(AlarmManager.RTC_WAKEUP, calWednesday.getTimeInMillis(), pIntent(this, WEDNESDAY));
alarmMgr.set(AlarmManager.RTC_WAKEUP, calFriday.getTimeInMillis(), pIntent(this, FRIDAY));
//pIntent method
public static PendingIntent pIntent(Context context, int id){
Intent intent = new Intent();
intent.setAction("myAlarm.intent.action.CLOCK");
return PendingIntent.getBroadcast(context, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}