Android:取消其他活动的闹钟集

rya*_*dlf 1 android alarmmanager

我会尽力解释这个问题.基本上,我有Activity 1使用ExternalClass做各种事情.活动2还引用了活动1的所述ExternalClass的对象.从这两个活动中我可以使用AlarmManager设置警报,但我希望能够取消从活动1中的任一活动创建的所有警报.

所有警报都使用相同的意图和相同的AlarmManger(都在ExternalClass中创建)设置,但当我单击活动1中我应该调用myAlarms.cancel(intent)的按钮时,它只取消使用活动1班.

通过引用在活动1中创建的该类的对象,在活动2中引用了ExternalClass,因此它们都应该使用相同的ExternalClass实例.由于设置警报时使用的上下文,我很确定它不会取消警报,但我无法弄清楚如何解决这个问题.

rya*_*dlf 5

为了解决这个问题,我习惯了以下代码:

timerAlarmIntent = PendingIntent.getBroadcast(myContext, i, alarmIntent, 0);
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
intentArray.add(timerAlarmIntent);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);
Run Code Online (Sandbox Code Playgroud)

我将requestCode设置为唯一ID.这是一个for循环,我代表0,1,2 ......

要取消警报,我必须将每个警报添加到列表中,并在我想要取消所有警报时遍历列表.

private void cancelAlarms(){
if(intentArray.size()>0){
    for(int i=0; i<intentArray.size(); i++){
        myAM.cancel(intentArray.get(i));
    }
    intentArray.clear();
}
Run Code Online (Sandbox Code Playgroud)

}