2013-03-07 35 views
3

我有一個應用程序需要設置一週中多天的鬧鐘,具體取決於用戶設置的日期。我已經在適當的時候在觸發報警的地方工作,但我想知道如何在不覆蓋當前的AlarmManager的情況下執行多個操作。例如,這裏是我的測試代碼:如何設置多個AlarmManagers?

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的一週的最後一天設置警報。我怎樣才能做出多重警報?

回答

3

問題是,儘管您正在爲您的PendingIntent創建一個唯一的ID,它會設置單獨的警報,但在您的測試中,您將重複使用相同的PendingIntent,這會覆蓋以前的一個。創建一個新的PendingIntent用不同的alarmid來測試這個。