几天前,我在努力寻找一种使用自定义意图创建警报的方法。尽管我得到了明确的答案,但我必须基于一些唯一的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);
这是这样的:
消息引发
问题
对于一次联系,这种情况可能会发生多次。当生成第二条消息时,通知会很好地发出(在这里消息很好),但是当用户操作通知时,其意图是使用旧数据,因此传递的是前一条消息,而不是全新的消息。
因此,某种程度上,其目的是缓存和重用以前的额外功能。如何使每个联系人和每个操作具有唯一性?
最佳答案
如果此联系人的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/