如何在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); } 

提前致谢

  • Android通知在时间
  • 如何设置重复发生的AlarmManager每天执行代码
  • Google日历或Instagram如何在强制停止后始终开始运行应用程序
  • 在oppo - coloros,vivo-funtouch os,Xiomi-MIUI os等定制的操作系统中,如何保护后台服务/
  • Android:将android.net.Uri对象保存到数据库
  • 在Android中设置重复星期几闹钟
  • AlarmManager并不总是执行BroadcastReceiver
  • 如何debugging从您的应用程序运行哪个AlarmManager报警?
  • 在你的pendingIntent你需要设置第二个requestCode到一个唯一的数字。 我通常通过for循环运行数组,并为数组中的每个项目dynamic设置请求代码。 如果没有requestCode则报警将相互覆盖。

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

    基本上,你只是想改变requestCode到一个dynamic的数字。 通过将其设置为f您将为数组中的每个项目分配一个新的唯一标识。 请记住,如果您要取消警报,则需要使用另一个循环并单独取消每个警报。 我亲自将所有的警报添加到他们自己的arrays中,以便我可以分别处理它们。

    那么如果你需要取消他们:

      private void cancelAlarms(){ if(intentArray.size()>0){ for(int i=0; i<intentArray.size(); i++){ alarmmanager.cancel(intentArray.get(i)); } intentArray.clear(); } } 

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

    以下是创build多个单一警报并将其保存在ArrayList中的代码。 我把PendingIntent放在数组中,因为你需要取消你的警报。 //上下文variables包含你的Context

     AlarmManager mgrAlarm = (AlarmManager) context.getSystemService(ALARM_SERVICE); ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>(); 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); }