Android继续caching我的意图额外,如何申报一个待定的意图,保持新鲜的额外?

几天前,我正在努力寻找一种方法来使用自定义的意图,我的报警。 虽然我得到了明确的答案,我必须根据一些独特的ID来定制Intents。 setAction()仍然有一些问题。

我这样定义一个PendingIntent:

 Intent intent = new Intent(this, viewContactQuick.class); intent.setAction("newmessage"+objContact.getId());//unique per contact intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP ); intent.putExtra("id", Long.parseLong(objContact.getId())); intent.putExtra("results", result.toArray()); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); 

那么这被通知pipe理器使用

 NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); // first try to clear any active notification with this contact ID mNotificationManager.cancel(Integer.parseInt(objContact.getId())); // then raise a new notification for this contact ID mNotificationManager.notify(Integer.parseInt(objContact.getId()), notification); 

这是这样工作的:

  • 应用程序为联系人创build一条消息
  • 提供了联系人ID和消息详情的意图
  • 通知与消息一起提出
  • 用户对通知的操作和应用程序显示意图传递的消息

问题

联系人可能会多次发生这种情况。 而当第二条消息生成时,通知就会被很好地提出(消息很好),但是当用户操作使用旧数据的通知时,意味着前面的消息被传递,而不是新的消息。

所以不pipe怎样,意图是caching和重用以前的额外function。 我怎样才能使每个联系人和每个动作独特?

如果只有其中一个PendingIntents对于此联系人在任何时间点FLAG_UPDATE_CURRENT完成,或者如果您始终想要使用最新的一组额外内容, FLAG_UPDATE_CURRENT在创buildPendingIntent时使用FLAG_UPDATE_CURRENT

如果多个特定联系人PendingIntent出现,并且需要单独附加,则需要添加一个计数或时间戳或其他内容来区分它们。

 intent.setAction("actionstring" + System.currentTimeMillis()); 

UPDATE

此外,对PendingIntent getActivity()和亲属的轻度logging的第二个参数显然可用于为相同的底层Intent创build不同的PendingIntent对象,尽pipe我从来没有尝试过这种方法。

我通常指定唯一的requestCode来防止我的PendingIntents相互覆盖:

 PendingIntent pending = PendingIntent.getService(context, unique_id, intent, 0); 

而你的情况我同意CommonsWare你只需要FLAG_UPDATE_CURRENT标志。 新的额外将覆盖旧的值。