在我的活动中,我正在管理用户提供的食物列表,并根据它们的到期时间设置警报。然而由于某种原因,传递给 onRecieve 的意图并不是我认为应该的。
例如,用户输入有效期为 5/8 的浆果和有效期为 6/4 的黄油,然后点击保存数据。对于每个项目,都会调用此方法。每次调用此方法时,我都会使用 putExtra 保存到期日期。
public void setOneTimeAlarm(int daysAfterSet) {
//declare intent using class that will handle alarm
Intent intent = new Intent(this, FoodExpAlarm.class);
//retrieve pending intent for broadcast, flag one shot means will only set once
intent.putExtra("expDate", expDate);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
//params: specify to use system clock use RTC_WAKEUP to wakeup phone for notification,
//time to wait, intent
alarmMan.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + (daysAfterSet * AlarmManager.INTERVAL_DAY), pendingIntent);
}
这会导致为浆果设置一个警报,因为它们即将到期,而黄油没有警报(距离到期还有一个月)。然后调用一次 foodExpAlarm 类,并正确显示有关浆果的通知。然而,问题来自于下一批食物的输入时间。接下来,用户输入 5/8 到期的培根和 5/15 到期的香蕉。现在 setOneTimeAlarm 再次调用两次(每次调用一次),而 foodExpAlarm 再次调用培根一次。
但是,在 foodExpAlarm 中,传入的额外内容来自黄油而不是培根。这对我来说毫无意义,因为应该在时间过去后调用 foodExpAlarm,并且应该使用与预定时间相对应的待处理意图来调用。然而,情况似乎并非如此,似乎意图(或至少是额外的)只对应于添加所有食物的顺序。
执行总结:
- 添加浆果 5/8
- 加入黄油 6/4
- 节省
- 正确显示浆果通知
- 加培根 5/8
- 加香蕉 5/15
- 节省
- 黄油显示不正确
我的问题是,为什么我会得到黄油而不是培根的意图/额外内容?我对意图的理解是错误的吗?我怎样才能解决这个问题?
foodExpAlarm:
public void onReceive(Context context, Intent intent) {
Bundle exp = intent.getExtras(); //This gets the extras from butter, not bacon like I want
Object temp = exp.get("expDate");
Enter_Foods.expDate = new DateTime(temp);
intent.getExtras();
int id = (int) (Enter_Foods.expDate).getMillis();
....
notificationMan = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
//i think this gets pending intent from the alarm that called this method
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
new Intent(context,MainActivity.class), Intent.FLAG_ACTIVITY_NEW_TASK);
//creates notification object/icon, and set text to flow across top bar
Notification notif = new Notification(R.drawable.ic_launcher,
"Food expiring soon", System.currentTimeMillis());
//specify what to display when notification is shown
notif.setLatestEventInfo(context, from, message, contentIntent);
//use nofication manager to send message to phone, will update if same id
notificationMan.notify(id, notif);
}