Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android alarmmanager multiple alarms, one overwrites the other?

Tags:

java

android

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();      
    }
like image 483
user1349984 Avatar asked Apr 22 '12 19:04

user1349984


People also ask

How do I set multiple alarms on android?

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.

How do I set multiple alarms?

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 .

What is android alarm Manager?

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.


1 Answers

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.

like image 85
Hesham Saeed Avatar answered Oct 13 '22 23:10

Hesham Saeed