如何使用android闹钟pipe理器设置多个闹钟
我正在build立一个报警应用程序。我已经成功实现了基本的报警function。
Calendar calendar = Calendar.getInstance(); calendar.set(calendar.HOUR_OF_DAY, sHour); calendar.set(calendar.MINUTE, sMin); calendar.set(calendar.SECOND, 0); calendar.set(calendar.MILLISECOND, 0); long sdl = calendar.getTimeInMillis(); Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(AlarmList.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager ALARM1 = (AlarmManager)getSystemService(ALARM_SERVICE); ALARM1.set(AlarmManager.RTC_WAKEUP, sdl, sender);
在我的应用程序中,用户可以select星期几(星期日,星期一…)每周重复报警。 我试图创build多个警报,每周重复,但不知道如何去做。 我可以使用(重复)间隔创build它,还是应创build多个警报pipe理器?
您需要为pending intents
使用different Broadcast id's
。 像这样的东西:
Intent intent = new Intent(load.this, AlarmReceiver.class); final int _id = (int) System.currentTimeMillis(); PendingIntent appIntent = PendingIntent.getBroadcast(this, _id, intent,PendingIntent.FLAG_ONE_SHOT);
使用系统时间应该是每个待处理意图的唯一标识符。
从文档 :
如果已经为这个Intent计划了一个警报(两个intent被filterEquals(Intent)定义的相等 ,那么它将被移除并被这个
多个AlarmManagers
不能解决您的问题。 如果他们有多个不同的警报(不同的时间和不同的日子),那么每当您发出先前的警报时,您都需要在BroadcastReceiver
设置警报。
您还需要保持RECEIVE_BOOT_COMPLETED
并有一个BroadcastReceiver
来接收启动,以便如果电话重新启动,您可以重新安排您的警报。
要设置多个警报,您需要每次定义您的Intent
以便与其他人区分。 最简单的方法是将Intent
的data
字段设置如下:
// give your alarm an id and save it somewhere // in case you want to cancel it in future String myAlarmId = ...; // create your Intent Intent intent = new Intent(AlarmList.this, AlarmReceiver.class); intent.setData(Uri.parse("myalarms://" + myAlarmId)); ...
你的代码@ Hassy31的其余部分是好的,保持不变。
请注意,根据文档, PendingIntent.getBroadcast()
方法(由@paragbuild议PendingIntent.getBroadcast()
中的requestCode
参数未使用,所以这不是正确的方法。
为pendingIntent设置广播id
for (int id = 0; id < 3; id++) { // Define pendingintent PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id,ntent, 0); // set() schedules an alarm alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, pendingIntent); }