首页 文章

Android保持缓存我的意图额外,如何声明一个保持新鲜额外的待定意图?

提问于
浏览
57

几天前,我一直在努力寻找一种方法来为警报使用自定义意图 . 虽然我得到了明确的答案,我必须根据一些独特的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);

然后由通知管理器使用

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);

这样工作如下:

  • 应用程序为联系人创建消息

  • 提供了一个意图,其中包含联系人ID和有关该消息的详细信息
    使用该消息引发

  • 通知

  • 用户对通知的操作和应用程序显示意图传递的消息

The problem

对于联系人,这可能不止一次发生 . 当生成第二条消息时,通知会很好地提出(消息在那里很好)但是当用户操作它使用旧数据的通知时的意图,所以先前的消息被传递而不是全新的消息 .

所以某种意图是缓存和重用以前的额外内容 . 如何使每个联系人和每个操作都具有唯一性?

2 回答

  • 91

    如果此联系人中只有一个 PendingIntents 在任何时间点都未完成,或者您总是想使用最新的附加组件,请在创建 PendingIntent 时使用 FLAG_UPDATE_CURRENT .

    如果一次有多个特定于联系人的 PendingIntent ,并且他们需要单独添加,您需要添加计数或时间戳或其他东西来区分它们 .

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

    UPDATE

    此外, getActivity() 上的 getActivity() 和kin的轻微记录的第二个参数显然可以用于为相同的底层 Intent 创建不同的 PendingIntent 对象,尽管我从未尝试过这个 .

  • 29

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

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

    在您的情况下,我同意CommonsWare您只需要FLAG_UPDATE_CURRENT标志 . 新的附加功能将覆盖旧值 .

相关问题