如何在android中一次设置多个警报?

我正在制作一个小应用程序,我必须从数组设置警报,但只设置一个警报,并且在arrays的最后位置的时间工作,为什么它的行为如下,这是我的代码

AlarmManager[] alarmManager=new AlarmManager[24]; for(f=0;f<arr2.length;f++) { Intent intent = new Intent(AlarmR.this, Riciving.class); pi=PendingIntent.getBroadcast(AlarmR.this, 0,intent, 0); alarmManager[f] = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager[f].set(AlarmManager.RTC_WAKEUP,arr2[f] ,pi); } 

提前致谢

pendingIntent您需要将第二个requestCode设置为唯一编号。 我通常通过for循环运行数组,并为数组中的每个项动态设置请求代码。 没有requestCode ,警报会相互覆盖。

 AlarmManager[] alarmManager=new AlarmManager[24]; intentArray = new ArrayList(); for(f=0;f 

基本上,您只想将requestCode更改为动态数字。 通过将其设置为f您将为数组中的每个项目赋予一个新的唯一ID。 请记住,如果要取消警报,则需要使用另一个for循环并单独取消每个警报。 我个人将所有警报添加到他们自己的arrays中,以便我可以单独处理它们。

然后,如果您需要取消它们:

  private void cancelAlarms(){ if(intentArray.size()>0){ for(int i=0; i 

如果要设置多个警报(重复或单个),则只需要使用不同的requestCode创建其PendingIntents。 如果requestCode相同,则新警报将覆盖旧警报。

下面是创建多个单个警报并将它们保存在ArrayList中的代码。 我将PendingIntent保留在数组中,因为您需要取消警报。 //上下文variables包含您的Context

 AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); ArrayList intentArray = new ArrayList(); for(i = 0; i < 10; ++i) { Intent intent = new Intent(context, OnAlarmReceiver.class); // Loop counter `i` is used as a `requestCode` PendingIntent pendingIntent = PendingIntent.getBroadcast(context, i, intent, 0); // Single alarms in 1, 2, ..., 10 minutes (in `i` minutes) mgrAlarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60000 * i, pendingIntent); intentArray.add(pendingIntent); }