我似乎无法找到答案,但传递匹配的PendingIntent
以从警报中删除的标准是什么?它基于com.blah.package.myclass之类的名称,还是基于Extra
的问题?
例如,我正在做类似这样的事情,并且所有警报都会激发相同的意图:
public void setAlarm(Context context, long nextAlarmMillis) {
Intent intent = new Intent(context, AlarmReceiver.class);
intent.putExtra("alarm", this);
PendingIntent sender = PendingIntent.getBroadcast(context, 1234 /* unused */, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Get the AlarmManager service
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.cancel(sender);
am.set(AlarmManager.RTC_WAKEUP, nextAlarmMillis, sender);
}
会发生什么?Alarm
类可以更改等,并以Extra
的形式传入。我正在取消之前的闹钟,但我不确定它是否正在做任何事情,或者是否会留下任何遗留警报。
任何人都知道吗?
答案 0 :(得分:3)
AlarmManager
文档
任何类型的警报,其Intent与此匹配(由filterEquals(Intent)定义)将被取消。
其中,filterEquals()定义为:
确定两个意图是否相同以进行意图解析(过滤)。也就是说,如果他们的行为,数据,类型,类别和类别是相同的。这不会比较意图中包含的任何额外数据。
我认为最简单的方法是将PendingIntent
的引用传递给AlarmManager,并将其传递给取消。或者有工厂方法来构建这样的pi。