2013-03-07 2 views
3

У меня есть приложение, которому необходимо настроить будильник в течение нескольких дней недели, в зависимости от того, в какие дни пользователь устанавливает их. Я работаю там, где он вызывает тревогу в соответствующее время, но я хочу знать, как сделать несколько без их переопределения текущего 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); 
      } 
     } 

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

ответ

3

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

Смежные вопросы