2016-06-20 9 views
0

Edit: Es wird mir nicht erlauben, meine eigene Antwort für 2 Tage zu akzeptieren, aber ich habe es herausgefunden. Siehe meine Antwort unten, wenn Sie ein ähnliches Problem habenZurücksetzen der Nachrichtennummer für Posteingangsstil Benachrichtigungen

Ich arbeite daran, die Push-Benachrichtigungen aus meiner App zu stapeln und sie mit InboxStyle mit einem zusammenfassenden Text anzuzeigen. Momentan zeige ich bis zu 3 Benachrichtigungen an, gefolgt von einer "+ x mehr" -Nachricht, falls erforderlich. Um das zu tun, behalte ich die Anzahl der Nachrichten im Auge; Ich bin mir jedoch nicht sicher, wie ich die Anzahl der Nachrichten zurücksetzen kann, wenn der Benutzer auf die Benachrichtigung klickt. Wenn der Benutzer beispielsweise 3 Benachrichtigungen erhält und dann auf die Push-Benachrichtigung klickt, um in die App zu gelangen, möchte ich, dass die nächste Benachrichtigung als eine einzige Benachrichtigung angezeigt wird, aber sie wird gerade angezeigt: Nachricht eine Nachricht Nachricht c + 1 mehr . " Gibt es einen Listener, mit dem ich die Nachrichtennummer auf 0 zurücksetzen kann, wenn der Benutzer die Benachrichtigung abbricht? Code unten als Referenz:

public class GCMPushReceiverService extends GcmListenerService { 

private static final String TAG = "GCMPushReceiverService"; 
private int objectTypeCode; //DLS 
private String contentText; 
private String objectKeyGUID; //DLG 
private String alert; 
private String sound; 
private boolean vibrate; 
private String contentTitle; 
private String collapse_key; 
private String tickerText; 
private static int message_number = 0; 
private static ArrayList<String> messages = new ArrayList<String>(); 

private static final String MY_GROUP = "my_group"; 

//with every new message 
@Override 
public void onMessageReceived(String from, Bundle data){ 
    this.objectTypeCode = Integer.parseInt(data.getString("objectTypeCode")); 
    this.contentText = data.getString("contentText"); 
    this.objectKeyGUID = data.getString("objectKeyGUID"); 
    this.alert = data.getString("alert"); 
    this.sound = data.getString("sound"); 
    this.vibrate = Boolean.parseBoolean(data.getString("vibrate")); 
    this.contentTitle = data.getString("contentTitle"); 
    this.collapse_key = data.getString("collapse_key"); 
    this.tickerText = data.getString("ticker_Text"); 

    messages.add(message_number, contentTitle +": " + contentText); 
    message_number++; 

    Log.d(TAG, "From: " + from); 
    sendNotification(); 
} 

private void sendNotification() { 
    Intent intent; 


    if (objectKeyGUID != null && !objectKeyGUID.equals("")) intent = deepLink(); 
    else intent = new Intent(this, LogInPage.class); 

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    int requestCode = 0; 
    PendingIntent pendingIntent = 
      PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_ONE_SHOT); 




    Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this); 
    noBuilder.setSmallIcon(R.drawable.icon); 
    noBuilder.setContentText(contentText); 
    noBuilder.setTicker(tickerText); 
    noBuilder.setContentIntent(pendingIntent); 
    noBuilder.setSound(sound); 
    noBuilder.setGroup(MY_GROUP); 
    noBuilder.setAutoCancel(true); 

    Bitmap largeIcon = BitmapFactory.decodeResource(getResources(), 
      R.drawable.icon); 
    noBuilder.setLargeIcon(largeIcon); 



    //if we have more than one message, we want to display them in one notification, inbox style 
    //if it's more than 3, display the first three and have a "+ x more" message 
    //TODO: reset the message_number when we click the notification 
    if (message_number > 1) { 
     noBuilder.setContentTitle(message_number + " messages"); 

     NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 
     for (int i = 0; i < message_number && i < 3; i++) 
      inboxStyle.addLine(messages.get(i)); 
     if (message_number > 3) 
      inboxStyle.setSummaryText("+ " + (message_number - 3) + " more"); 
     inboxStyle.setBigContentTitle(message_number + " Notifications"); 
     //noBuilder.setContentTitle(message_number + " Notifications"); 
     noBuilder.setStyle(inboxStyle); 
    } 

    else { 
     noBuilder.setContentTitle(contentTitle); 
    } 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(0, noBuilder.build()); //0 = ID of notification 
} 

Antwort

0

Ich landete dieses Problem auf der Lösung durch einen Singleton mit class-- ich die Arraylist von Nachrichten sowie den message_number Wert in der Singleton-Klasse gespeichert. Ich habe getMessageNumber und getMessages in onMessageRecieved aufgerufen und dann am Ende meiner sendNotification-Methode die neuen Werte erneut festgelegt. Ich habe dann die Werte für message_number bzw. null für die ArrayList in meinem onResume-Listener meiner Hauptaktivität auf 0 zurückgesetzt, so dass die Benachrichtigungen bei jedem Öffnen der App aktualisiert wurden. Ich fand How to keep track of notifications to know when to show a summary notification um hilfreich zu sein --- hoffentlich wird dieser Beitrag und dieser jemand anderen mit einem ähnlichen Problem

helfen