如何设置多个AlarmManager?
Posted
技术标签:
【中文标题】如何设置多个AlarmManager?【英文标题】:How to set multiple AlarmManagers? 【发布时间】:2013-03-07 22:27:46 【问题描述】:我有一个应用需要在一周中的多天设置闹钟,具体取决于用户设置闹钟的日期。我让它在适当的时间触发警报的地方工作,但我想知道如何在不覆盖当前警报管理器的情况下执行多个操作。例如,这是我的测试代码:
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
创建一个唯一 ID,这将设置单独的警报,但在您的测试中,您正在重复使用相同的 PendingIntent
,这将覆盖您之前的那个。使用不同的alarmid
创建一个新的PendingIntent
来测试它。
【讨论】:
以上是关于如何设置多个AlarmManager?的主要内容,如果未能解决你的问题,请参考以下文章
android alarmmanager如果设置过去的时间就会触发广播?
如何将 AlarmManager 附加到 BootReceiver