几天前,我在努力寻找一种使用自定义意图创建警报的方法。尽管我得到了明确的答案,但我必须基于一些唯一的ID(例如)自定义Intent。 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和有关消息
  • 的详细信息
    消息引发
  • 通知
  • 用户对通知进行操作,应用程序显示意图
  • 传递的消息

    问题

    对于一次联系,这种情况可能会发生多次。当生成第二条消息时,通知会很好地发出(在这里消息很好),但是当用户操作通知时,其意图是使用旧数据,因此传递的是前一条消息,而不是全新的消息。

    因此,某种程度上,其目的是缓存和重用以前的额外功能。如何使每个联系人和每个操作具有唯一性?

    最佳答案

    如果此联系人的PendingIntents中只有一个在任何时间点都未清,或者如果您始终想使用最新的附加功能,请在创建FLAG_UPDATE_CURRENT时使用PendingIntent

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

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

    更新

    此外,getActivity()和kint在PendingIntent上的文档化程度很低的第二个参数显然可用于为相同的基础PendingIntent创建不同的Intent对象,尽管我从未尝试过。

    关于android - Android会不断缓存我的意向附加内容,如何声明待处理的意向以保留新的附加内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3140072/

    10-12 04:12