我有这个方法,我打电话来按顺序安排事件
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始终不同......
答案 0 :(得分:3)
Android认为你的意图是平等的,因为它们只是额外的不同。如果意图的行为,数据,类型,类别和类别相同,则认为它们是等于的。为了确保保留每个意图,您需要更改其中一个。
来自PendingIntent
documentation:
由于这种行为,为了检索PendingIntent,重要的是要知道两个Intent何时被认为是相同的。 人们常犯的一个错误就是创建多个PendingIntent对象,其Intent只在其“额外”内容中有所不同,期望每次都获得不同的PendingIntent。这不会发生。用于匹配的Intent部分与Intent.filterEquals定义的部分相同。如果你使用两个与Intent.filterEquals相同的Intent对象,那么你将获得两个相同的PendingIntent。
答案 1 :(得分:1)
PendingIntents被缓存。 如果要确保数据被覆盖和刷新,只需给它一个不同的参数。