1

我似乎无法找到答案,但是传递匹配PendingIntent以从警报中删除的标准是什么?它仅基于 com.blah.package.myclass 之类的名称,还是Extras 重要?

例如,我正在做这样的事情,所有警报都会触发相同的意图:

    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. 我正在取消上一个警报,但我不确定它是否正在执行任何操作,或者是否会保留任何剩余的警报。

有谁肯定知道吗?

4

1 回答 1

3

以下在AlarmManager文档中提到

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

其中,filterEquals()定义为:

出于意图解析(过滤)的目的,确定两个意图是否相同。也就是说,如果它们的动作、数据、类型、类和类别相同。这不会比较意图中包含的任何额外数据。

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

于 2012-06-11T01:23:34.920 回答