如何正确取消待处理的警报

时间:2012-06-11 01:12:01

标签: android

我似乎无法找到答案,但传递匹配的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的形式传入。我正在取消之前的闹钟,但我不确定它是否正在做任何事情,或者是否会留下任何遗留警报。

任何人都知道吗?

1 个答案:

答案 0 :(得分:3)

AlarmManager文档

中提到了以下内容
  

任何类型的警报,其Intent与此匹配(由filterEquals(Intent)定义)将被取消。

其中,filterEquals()定义为:

  

确定两个意图是否相同以进行意图解析(过滤)。也就是说,如果他们的行为,数据,类型,类别和类别是相同的。这不会比较意图中包含的任何额外数据。

我认为最简单的方法是将PendingIntent的引用传递给AlarmManager,并将其传递给取消。或者有工厂方法来构建这样的pi。