如何防止Android通知覆盖自己?

时间:2016-12-27 03:07:55

标签: android android-notifications

我正在使用XMPP(smack)创建消息传递应用程序,每当收到新消息时我都会发送通知。问题是,如果我收到来自两个不同用户的消息,我只能看到最后一个通知。我该怎么改变它?这是我的代码。

Intent thisIntent = new Intent(mApplicationContext, ChatActivity.class);
thisIntent.putExtra("EXTRA_CONTACT_JID",contactJid);
PendingIntent contentIntent = PendingIntent.getActivity(mApplicationContext, 0, thisIntent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder b = new NotificationCompat.Builder(mApplicationContext);

b.setAutoCancel(true)
        .setDefaults(Notification.DEFAULT_ALL)
        .setWhen(System.currentTimeMillis())
        .setSmallIcon(R.drawable.fab_bg_mini)
        .setTicker("Hearty365")
        .setContentTitle("New message")
        .setContentText(" You received a new message from " + contactJid)
        .setContentIntent(contentIntent)
        .setContentInfo("Info");
if(!ChatActivity.active){
    b.setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND);
}

NotificationManager notificationManager = (NotificationManager) mApplicationContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, b.build());

正如你所看到的,我添加了一个对我来说很重要的额外contactJid。我需要设置它,如果用户点击一个通知,它的contactJid将是这个,如果另一个,它的contactJid将是另一个。

1 个答案:

答案 0 :(得分:6)

notificationManager.notify(1, b.build());是您的问题 - 您需要为此通知as per the documentation提供唯一标识符:

  

如果您的应用程序已经发布了具有相同ID的通知但尚未取消,则该通知将被更新的信息替换。

您为每个通知提供常量1,而不是唯一ID。我建议使用联系人JID的哈希值(我假设是一个字符串):

notificationManager.notify(contactJid.hashCode(), b.build());