我花了很多时间来解决我的问题。我在android中编写了一个messenger客户端。我的申请收到收入消息并发出通知。在通知栏中,我在通知项目中显示每条收入消息。当点击通知项时,它将打开一个对话活动,列出从开始到现在的所有消息。一切都很完美但是当我点击通知栏中的另一个项目时,什么都没发生! (它必须为另一个对话重新加载数据)。这是我提出通知的代码:
private void showNotification(String message, Class activity, Message messageObject) {
//Get the Notification Service
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence text = message;//getText(R.string.service_started);
Notification notification = new Notification(R.drawable.ic_launcher, text, System.currentTimeMillis());
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Intent callbackIntent = new Intent(context, activity);
if(messageObject != null)
{
callbackIntent.putExtra("conversation", MessageManager.getProvider().getConversation(messageObject.getConversationId()));
}
//callbackIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
int myUniqueValue = new Random().nextInt();
PendingIntent contentIntent = PendingIntent.getActivity(context, myUniqueValue, callbackIntent, PendingIntent.FLAG_ONE_SHOT);
notification.setLatestEventInfo(context, messageObject.getFrom(), text, contentIntent);
notificationManager.notify(messageObject.getFrom(), myUniqueValue, notification);
}
这是调用showNotification函数的代码块
showNotification(message.getBody(), ConversationActivity.class, messageObject);
答案 0 :(得分:0)
尽管您努力提供唯一值,但系统会将这些PendingIntent
视为相同,因此一旦您单击一个,其余部分将呈现为惰性。
您需要添加区别于callbackIntent
的内容;我建议发明一个数据URI,其中包含会话ID或其他保证每个通知不同的内容(请参阅setData)。
最后,我建议您尝试将多个通知合并到一个图标中 - 您不希望向用户发送垃圾邮件。请参阅“堆叠您的通知”下的Notifications section in the Android Design guide。
答案 1 :(得分:-1)
我改变了我的代码并且效果很好
private void showNotification(Context context, CharSequence contentTitle, CharSequence contentText, CharSequence notificationContent, Class activity, Conversation conversation) {
//Get the Notification Service
NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.ic_launcher, notificationContent, System.currentTimeMillis());
notification.flags |= Notification.FLAG_AUTO_CANCEL;
Intent callbackIntent = new Intent(context, activity);
if(conversation != null)
{
callbackIntent.putExtra("conversation", conversation);
}
callbackIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
int myUniqueValue = new Random().nextInt();
PendingIntent contentIntent = PendingIntent.getActivity(context, myUniqueValue, callbackIntent, PendingIntent.FLAG_ONE_SHOT);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notificationManager.notify(myUniqueValue, notification);
}