2 ssummeraw ssummeraw 于 2013.03.26 13:18 提问

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

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

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
LiDaming_and   2013.04.02 14: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();
    }
}
Csdn user default icon
上传中...
上传图片
插入图片