如何在不同的类中使用PendingIntent取消AlarmManager?

3
我正在尝试使用AlarmManager在我设定的闹钟时间执行一些任务。我知道必须使用相同的PendingIntent来创建和取消闹钟。但是问题是,我在“ClassA”类中创建闹钟,稍后在“ClassB”类中取消闹钟。这就让我想知道每个类中要广播的意图是否相同,因为它们在不同的类中使用“不同的上下文”。它们可以被视为相同的PendingIntent并且我能够取消闹钟吗?如果不能,如何使它们相同?在“ClassA”类(扩展BroadcastReceiver)中创建闹钟的方法如下:
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, myReceiver.class);
PendingIntent pender = PendingIntent.getBroadcast(context, codeNum, intent, 0);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY, pender);

取消"ClassB"(继承自BaseAdapter)中的警报:

alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, myReceiver.class);
PendingIntent pilocal = PendingIntent.getBroadcast(context, codeNum, intent, 0);
pilocal.cancel();
alarm.cancel(pilocal);

PendingIntent实现了Parcelable接口,因此您可以在活动之间传递它。您尝试过这样做吗? - Abdullah
@Abdullah 我无法通过它,因为这两个类没有关联,它们是独立的。这就是为什么我正在尝试使用相同的请求代码声明新的Intent和PendingIntent。 - user5150273
1个回答

2

如果提供相同的操作、相同的Intent动作、数据、类别、组件和相同的标志,您可以通过提供相同的PendingIntent来检索相同类型的PendingIntent。

是的,如果它仍然有效,您可以从另一个类取消您的闹钟。只需确保传递与创建挂起意图时使用的相同参数和请求代码相同。


你的问题是:它们可以被视为相同的PendingIntent吗?我可以取消警报吗?如果不行,该如何让它们相同?是的,它们可以被视为相同的PendingIntent,并且如果该PendingIntent仍然有效,您可以从另一个类取消警报。 - Ankita
即使它们在Intent中使用不同的上下文,它们也可以是“相同”的PendingIntents吗?因为您说它必须是相同的Intent,但是每个Intent中的上下文是不同的,所以它的Intent动作不是相同的,我猜。 - user5150273
我还有一个问题。如果我在创建闹钟时将额外的字符串放入Intent中,那么当我取消闹钟时,是否也必须将额外的字符串(尽管不必要)放入Intent中,以使它们成为相同的PendingIntent? - user5150273
1
在比较 Intent 时,不考虑任何“额外信息”。要取消闹钟,您不需要任何“额外信息”。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接