如何设置多个AlarmManager?

时间:2013-03-07 22:27:46

标签: android alarmmanager alarm

我有一个应用需要为一周中的多天设置闹钟,具体取决于用户设置它们的日期。我让它在适当的时候触发警报的地方工作,但是我想知道如何在没有它们的情况下覆盖当前的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 个答案:

答案 0 :(得分:3)

问题在于,虽然您要为PendingIntent创建一个唯一的ID,这会设置单独的闹钟,但在您的测试中,您将重复使用相同的PendingIntent,这将覆盖您之前的PendingIntent。使用不同的alarmid创建一个新{{1}}来测试此内容。