单击差异通知后如何打开相同的活动

时间:2013-04-09 17:21:23

标签: android notifications

我花了很多时间来解决我的问题。我在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);

2 个答案:

答案 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);
    }