如何使用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以便与其他人区分。 最简单的方法是将Intentdata字段设置如下:

 // 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); }