gpt4 book ai didi

Android:AlarmManager 无法取消警报

转载 作者:行者123 更新时间:2023-11-29 02:11:30 25 4
gpt4 key购买 nike

我正在使用 alarmManager 在我的应用程序中设置多个警报,但遇到了问题。以这种方式设置 PendingIntent 时:

timerAlarmIntent = PendingIntent.getBroadcast(myContext, 0, alarmIntent, 0);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);

在 requestCode 设置为 0 的地方(在 getBroadcast 的上下文旁边)我可以使用:

myAM.cancel(timerAlarmIntent);

取消我在应用程序中设置的任何数量的警报。但是,我设置的每个闹钟都会覆盖最后一个,所以只有一个闹钟会响起。如果我将 requestCode 设置为一个唯一的数字,例如:

timerAlarmIntent = PendingIntent.getBroadcast(myContext, i, alarmIntent, 0);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);

其中使用 for 循环将 i 设置为每个警报的唯一 ID 号。这样所有警报都可以正常运行,但我无法取消警报,因为在我运行时实际上只有一个警报会取消:

myAM.cancel(timerAlarmIntent);

如何将 requestCode 设置为一个唯一的数字,并且还可以选择取消它?

我最终用来解决问题的代码是:

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

要取消 PendingIntents,我设置了以下方法:

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

最佳答案

为什么不将 timerAlarmIntent 对象存储在列表中并在需要时在循环中取消它们?

问候, 斯蒂芬

关于Android:AlarmManager 无法取消警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7072889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com