Как установить несколько AlarmManager?

У меня есть приложение, которое должно устанавливать будильник на несколько дней недели, в зависимости от того, в какие дни их устанавливает пользователь. У меня это работает, когда он вызывает тревогу в соответствующее время, но я хочу знать, как сделать несколько без их переопределения текущего AlarmManager. Например, вот мой тестовый код:

final int alarmid = (int)System.currentTimeMillis();    //creates unique id for the alarm attached to the object
tempmainfrag.mainObjectList.returnSchedule(i).setAlarmId(alarmid);
for(int j = 0; j < 7; j++)
        {
            if(tempmainfrag.mainObjectList.returnSchedule(i).returnDays()[j])   //if this day of the week has an alarm
            {
                int adjustedday = j+2;  //makes time for DAY_OF_WEEK where sunday = 1, monday = 2, etc.
                if (adjustedday == 8)
                    adjustedday = 1;



                Calendar startcal = Calendar.getInstance();
                startcal.set(Calendar.DAY_OF_WEEK, adjustedday);
                startcal.set(Calendar.HOUR_OF_DAY, tempmainfrag.mainObjectList.returnSchedule(i).returnTimes()[0]);
                startcal.set(Calendar.MINUTE, tempmainfrag.mainObjectList.returnSchedule(i).returnTimes()[1]);
                startcal.set(Calendar.SECOND, 0);
                Log.i("mydebug","Starting cal day of week: " + adjustedday);
                Log.i("mydebug","Starting cal hour of day: " + tempmainfrag.mainObjectList.returnSchedule(i).returnTimes()[0]);
                Log.i("mydebug","Starting minute: " + tempmainfrag.mainObjectList.returnSchedule(i).returnTimes()[1]);
                Intent intent = new Intent(this, SilenceHandler.class);
                intent.putExtra("starttime",tempmainfrag.mainObjectList.returnSchedule(i));
                intent.putExtra("alarm_message", "Test!");  //FOR TESTING
                PendingIntent pendintent = PendingIntent.getBroadcast(this, alarmid, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarmman = (AlarmManager)getSystemService(ALARM_SERVICE);
                alarmman.setRepeating(AlarmManager.RTC_WAKEUP, startcal.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendintent);
//              startcal.set(Calendar.MINUTE, (tempmainfrag.mainObjectList.returnSchedule(i).returnTimes()[1])+1);
//              alarmman.setRepeating(AlarmManager.RTC_WAKEUP, startcal.getTimeInMillis(), AlarmManager.INTERVAL_DAY * 7, pendintent);
            }
        }

Цикл for выполняет итерацию по дням недели, и на каждой итерации проверяет, должен ли быть установлен будильник на этот день. Этот код работает (предположительно), но чтобы проверить, смогу ли я установить еще один сигнал тревоги поверх него, я добавил последние две строки кода, которые здесь закомментированы. Это заставляет будильник срабатывать минуту спустя, но не минутой раньше. Я делаю это, чтобы продемонстрировать, что, если я хочу, чтобы этот код работал в течение нескольких дней недели, то, как он настроен в настоящий момент, просто установит будильник для последнего дня недели, который возвращает true. Как я могу сделать несколько будильников?

1 ответ

Проблема в том, что, хотя вы создаете уникальный идентификатор для вашего PendingIntent, что бы установить отдельные тревоги, в вашем тесте вы используете то же самое PendingIntent, который переопределит ваш предыдущий. Создать новый PendingIntent с другим alarmid чтобы проверить это.

Другие вопросы по тегам