0

我有这个方法,我调用它来按顺序安排事件

public void schedule(Event event) {
    SharedPreferences preferences = context
            .getSharedPreferences("myapp", 4);
    int numberofintent = preferences.getInt("numberofintent", 0);
    AlarmManager mgr = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    if (event.dtstart > today.getTimeInMillis() && event.isreminder) {
        Intent i = new Intent(context, ReminderPopUp01.class);
        i.putExtra("id", Long.toString(event._id));
        i.setAction("com.blah.Action");
        Log.e("id in scheduler",Long.toString(event._id));
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent pi = PendingIntent.getActivity(context,
                numberofintent, i, 0);
        mgr.set(AlarmManager.RTC_WAKEUP, event.dtstart, pi);

        numberofintent++;
        SharedPreferences.Editor editor = preferences.edit();
        editor.putInt("numberofintent", numberofintent);
        editor.commit();

    }

但我得到一个奇怪的结果:不同时间的不同 PendingIntents 被正确调度,

但他们携带所有相同的额外“id”!(但每个事件的id不同)

为什么会这样?


编辑 编辑 编辑 编辑 编辑

请注意 RequestCode 总是不同的......

4

2 回答 2

3

Android 认为您的 Intent 是平等的,因为它们仅在附加方面有所不同。如果 Intent 的操作、数据、类型、类和类别相同,则 Intent 被认为是相同的。为确保保留每个意图,您需要更改这五件事中的一件。

PendingIntent 文档中:

由于这种行为,重要的是要知道两个 Intent 何时被认为是相同的,以便检索 PendingIntent。人们犯的一个常见错误是创建多个 PendingIntent 对象,其 Intent 仅在其“额外”内容上有所不同,期望每次都获得不同的 PendingIntent。这不会发生。Intent 中用于匹配的部分与 Intent.filterEquals 定义的部分相同。如果您使用两个根据 Intent.filterEquals 等效的 Intent 对象,那么您将获得相同的 PendingIntent 对象。

于 2013-10-31T15:49:10.937 回答
1

当您放入其中的数据相似时,PendingIntents 会被缓存。如果你想确保数据被覆盖和刷新,只需给它一个不同的参数。

于 2013-10-31T15:50:20.090 回答