我的应用会发送通知,但问题是如果操作栏中有一些待处理的通知,我想更新将新消息添加到旧消息的消息。
例如,如果消息为Hi!,并且设备在用户打开旧消息之前收到另一条消息(Pamela),我只想显示一条消息,并显示消息Hi!帕梅拉。
我的发送通知代码是:
int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager) this
.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, msg, when);
String title = this.getString(R.string.app_name);
Intent notificationIntent = new Intent(getApplicationContext(),
FirstActivity.class);
notificationIntent.putExtra("message", msg);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
int notifyID = 1;
PendingIntent intent = PendingIntent.getActivity(this, notifyID,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, title, msg, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
是否可以获取PendingIntent的旧消息?
提前致谢。
答案 0 :(得分:0)
执行此操作的一种方法是在第一次调用以下内容之前,通过保存已显示的内容来连接字符串:
notificationIntent.putExtra("message", msg);
//save "Hi" , concat "Pamela" update the notification with the same notification id
保存字符串msg
,然后连接下一个通知中收到的字符串。但是,在这种情况下,需要识别哪些通知包含要连接的String的部分。您可以为消息设置前缀或通过通知ID进行标识。
我感觉不是理想的做法,但却无法想到其他任何事情。
答案 1 :(得分:0)
无法从NotificationManager检索现有通知。您需要独立于通知自己跟踪它,并将未读消息保存在其他位置(可能在SQLite数据库或SharedPreferences文件中)。
您需要确定用户是否刷掉通知,这意味着您必须使用NotificationCompat.Builder
类来创建通知。您可以使用setDeleteIntent
方法提供一个Intent,以便在通知被刷掉时触发,此时您可以从存储它们的任何位置删除旧消息,以便新消息仅显示新消息消息。