4

我花了很多时间来解决我的问题。我在android中写了一个信使客户端。我的申请收到收入消息并发出通知。在通知栏中,我在通知项中显示每条收入消息。当单击通知项目时,它将打开一个对话活动以列出从开始到现在的所有消息。一切都很完美,但是当我单击通知栏中的另一个项目时,什么也没有发生!(它必须为另一个对话重新加载数据)。这是我发出通知的代码:

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);
4

2 回答 2

0

尽管您努力提供唯一值,但PendingIntent系统会将这些 s 视为相同,因此一旦您单击一个,其余的就会变为惰性。

您需要添加一些区别于callbackIntent; 我建议发明一个数据 URI,其中包含对话 ID 或其他保证每个通知都不同的内容(请参阅setData)。

最后,我鼓励您尝试将多个通知折叠到一个图标中——您不想向用户发送垃圾邮件。请参阅Android 设计指南中的“通知”部分,在“堆叠您的通知”下。

于 2013-04-10T04:08:34.377 回答
-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);
    }
于 2013-04-10T10:59:23.190 回答