2016-12-27 2 views
0

Ich benutze XMPP (Smack), um eine Messaging-Anwendung zu erstellen, und ich sende Benachrichtigungen, wenn ich eine neue Nachricht erhalte. Das Problem ist, dass wenn ich Nachrichten von zwei verschiedenen Benutzern erhalte, ich nur die letzte Benachrichtigung sehen kann. Wie kann ich es ändern? Hier ist mein Code.Wie kann verhindert werden, dass Android-Benachrichtigungen sich selbst überschreiben?

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

Und wie Sie sehen können, habe ich eine extra KontaktJid, die mir wichtig ist. Ich muss es so einstellen, dass, wenn ein Benutzer auf eine Benachrichtigung klickt, seine contactJid dies ist und wenn eine andere seine contactJid sein wird.

Antwort

3

notificationManager.notify(1, b.build()); ist Ihr Problem - Sie brauchen eine eindeutige Kennung für diese Meldung zu liefern, as per the documentation:

Wenn eine Meldung mit der gleichen ID bereits von der Anwendung geschrieben wurde und noch nicht abgesagt worden, es wird durch die aktualisierten Informationen ersetzt.

Sie liefern die Konstante 1 für jede Benachrichtigung anstelle einer eindeutigen ID. Ich würde vorschlagen, einen Hash-Wert des Kontakt JID mit (was ich davon ausgehen, eine Zeichenfolge ist):

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

aah, sollte ich dies gedacht haben, t Ich einzigartige ganze Zahlen wurde mit, aber ich hätte nicht gedacht, zu erfahren, wie contactJid in Berechnung. Ich habe es noch nicht versucht, aber ich bin mir sicher, dass das funktionieren wird, ich akzeptiere die Antwort – Prethia

Verwandte Themen