I've searched posts for answers to my question but haven't found anything that solves my problem. I'm trying to set 3 different alarms using one AlarmSettings class. When I set two alarms, the second one takes precedence over the first and the first never goes off. I think it may have to do with my pending intent... I'm really new to android and would greatly appreciate the help. Here's my code for setting the alarms:
public void setAlarm() {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, timepicker.getCurrentHour());
calendar.set(Calendar.MINUTE, timepicker.getCurrentMinute());
calendar.set(Calendar.SECOND, 0);
if (timepicker.getCurrentHour() < calendar.get(Calendar.HOUR_OF_DAY)) { //if the alarm hour is less than the current hour
calendar.add(Calendar.DATE, 1); //then add 24 hours (1 DATE or Day)
}
//Create the text that we want to set the TextView alarmtime to in Main
StringBuilder sb = new StringBuilder();
if (timepicker.getCurrentHour() > 12) {
sb.append(timepicker.getCurrentHour() - 12);
} else {
sb.append(timepicker.getCurrentHour());
}
sb.append(":");
sb.append(timepicker.getCurrentMinute());
sb.append(" ");
if (timepicker.getCurrentHour() > 12) {
sb.append("pm");
} else {
sb.append("am");
}
if (((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited() == 1) {
((GlobalVariables)getApplication()).setAlarm1Cal(calendar);
Main.alarmTime1.setText(sb);
Intent intent1 = new Intent(AlarmSettings.this, AlarmReceiver.class);
intent1.putExtra("alarm_num", ((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited());
PendingIntent pendingIntent1 = PendingIntent.getActivity(getApplicationContext(), 0, intent1, PendingIntent.FLAG_ONE_SHOT);
alarmmanager1.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent1);
} else if (((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited() == 2) {
((GlobalVariables)getApplication()).setAlarm2Cal(calendar);
Main.alarmTime2.setText(sb);
Intent intent2 = new Intent(AlarmSettings.this, AlarmReceiver.class);
intent2.putExtra("alarm_num", ((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited());
PendingIntent pendingIntent2 = PendingIntent.getActivity(getApplicationContext(), 0, intent2, PendingIntent.FLAG_ONE_SHOT);
alarmmanager2.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent2);
} else if (((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited() == 3) {
((GlobalVariables)getApplication()).setAlarm3Cal(calendar);
Main.alarmTime3.setText(sb);
Intent intent3 = new Intent(AlarmSettings.this, AlarmReceiver.class);
intent3.putExtra("alarm_num", ((GlobalVariables)getApplication()).getCurrentAlarmBeingEdited());
PendingIntent pendingIntent3 = PendingIntent.getActivity(getApplicationContext(), 0, intent3, PendingIntent.FLAG_ONE_SHOT);
alarmmanager3.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent3);
}
finish();
Toast.makeText(getApplicationContext(), "system time: " + System.currentTimeMillis() + "\n" + "picked time: " + calendar.getTimeInMillis(), Toast.LENGTH_LONG).show();
}
To access the alarms, tap the alarm icon at the top of the screen. To add a new alarm, tap the plus icon button at the bottom of the screen. This button can be used to add multiple alarms. To set the time for the alarm, tap the hour on the time on the left and then tap the hour on the clock on the right.
If you want to set multiple alarms (repeating or single), then you just need to create their PendingIntent s with different requestCode . If requestCode is the same, then the new alarm will overwrite the old one. Here is the code to create multiple single alarms and keep them in ArrayList .
android.app.AlarmManager. This class provides access to the system alarm services. These allow you to schedule your application to be run at some point in the future.
PendingIntent pendingIntent1 = PendingIntent.getActivity(getApplicationContext(), 0, intent1, PendingIntent.FLAG_ONE_SHOT);
change the 0 attribute to an id for your alarm, for example you have three alarms,
repeat the above code with 0,1,2.
this way they won't override each other.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With