ssummeraw 2013-03-26 05:18 采纳率: 10%
浏览 2226
已采纳

一次如何设置多个报警器?

程序中,我需要从数组中设置报警器,但是每次只能设置一个报警器,并且在数组的最后位置。如在一次设置多个报警器呢?
这是我使用的代码:

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

                    } 
  • 写回答

1条回答

  • LiDaming_and 2013-04-02 06:37
    关注

    在 pendingIntent 中, 你应该设置第二个 requestCode 到一个单独的号码。我通常使用一个 for 循环来运行数组,并且给 array 中的每个 item 动态的设置请求代码,不用 requestCode 的话,alarm 就会相互覆盖。

    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 改成一个动态的数。通过设定它为f,给array 中的每个 item 一个新的独特的id,如果你想取消 alarms,你需要使用另一个 for 循环来逐个取消。
    如果你想取消他们:

    private void cancelAlarms(){
        if(intentArray.size()>0){
            for(int i=0; i<intentArray.size(); i++){
                alarmmanager.cancel(intentArray.get(i));
            }
            intentArray.clear();
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 arduino控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥85 maple软件,solve求反函数,出现rootof怎么办?
  • ¥15 求chat4.0解答一道线性规划题,用lingo编程运行,第一问要求写出数学模型和lingo语言编程模型,第二问第三问解答就行,我的ddl要到了谁来求了
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿