为什么我创建的PendingIntents都携带相同的额外内容?

时间:2013-10-31 15:44:48

标签: android

我有这个方法,我打电话来按顺序安排事件

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始终不同......

2 个答案:

答案 0 :(得分:3)

Android认为你的意图是平等的,因为它们只是额外的不同。如果意图的行为,数据,类型,类别和类别相同,则认为它们是等于的。为了确保保留每个意图,您需要更改其中一个。

来自PendingIntent documentation

  

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

答案 1 :(得分:1)

当您放入其中的数据相似时,

PendingIntents被缓存。 如果要确保数据被覆盖和刷新,只需给它一个不同的参数。