2016-08-19 3 views
5

Ich implementiere Push-Benachrichtigungen auf Android. Das Problem tritt auf, wenn ich meine Benachrichtigungen aktualisieren möchte. Ich möchte Benachrichtigungen stapeln, damit wenn eine Benachrichtigung sichtbar ist, ich es einfach aktualisiere und dies tue.Update Push-Benachrichtigung Android

Aber jedes Mal, wenn ich eine Benachrichtigung erhalte, wird ++ numMessages wieder auf 0 gesetzt, bevor es aufsummiert wird. Ich brauche es, um zusammenzufassen von wo es übrig war, wenn es eine Benachrichtigung auf dem Bildschirm gibt. Hier ist der Code:

//Class is extending GcmListenerService 
public class GCMPushReceiverService extends GcmListenerService { 

    //variables for message 1,on receiving job applications 
    String name; 
    String lastname; 
    String jobtypename; 
    String kasualjobdatetimepostedat; 
    String kasualjobcount; 
    int numMessages; 

    //This method will be called on every new message received 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     //Getting the message from the bundle 
     String message = data.getString("message"); 
     String messageid = data.getString("messageid"); 

     if(messageid.compareTo("1")==0){ 
      name=data.getString("firstname"); 
      lastname=data.getString("lastname"); 
      jobtypename=data.getString("jobtype"); 
      kasualjobdatetimepostedat=data.getString("kasualjobdatetimepostedat"); 
     } 
     else 
     { 
      kasualjobcount=data.getString("kasualjobcount"); 
     } 
      //Displaying a notification with the message 
     sendNotification(message, messageid); 
    } 

    //This method is generating a notification and displaying the notification 
    private void sendNotification(String message,String messageid) { 
     Intent intent = new Intent(this, Main_Activity.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); 

     Log.d("notificationid", String.valueOf(messageid)); 
     if(messageid.compareTo("2")==0) {//messages to do with jobs around 2 
      String messageionkasualjobscount="There are "+kasualjobcount+" new jobs around you"; 
      NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this); 
      noBuilder.setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle("KasualJobs2") 
        .setContentText(messageionkasualjobscount) 
        .setAutoCancel(true) 
        .setContentIntent(pendingIntent).setSound(Settings.System.DEFAULT_NOTIFICATION_URI); 

      NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(2, noBuilder.build()); //messageid = ID of notification 
     }else{//messages to with users applying for job 1 

      String messageionkasualjobapplication=name+ " "+ lastname+" has applied for the "+jobtypename+" you posted on "+kasualjobdatetimepostedat; 
      NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this); 
      noBuilder.setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle("KasualJobs1") 
        .setContentText(messageionkasualjobapplication) 
        .setAutoCancel(true).setNumber(++numMessages) 
        .setContentIntent(pendingIntent).setSound(Settings.System.DEFAULT_NOTIFICATION_URI); 

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

     } 
    } 

} 

Antwort

2

In der Regel sollten Sie nicht Ihre Feldwerte erwarten über mehrere Anrufe onMessageReceived bestehen bleiben, da der Dienst möglicherweise von den OS getötet worden Speicher freizugeben.

Ich empfehle Ihnen, Ihre Nachrichten in einer Datenbank zu speichern. Wenn Sie eine neue Nachricht erhalten, fügen Sie sie in die Datenbank ein und löschen Sie sie, wenn der Benutzer sie liest. Dann können Sie einfach abfragen, wie viele ungelesene Nachrichten es gibt.

0

Ich empfehle Ihnen, FCM anstelle von GCM zu verwenden (weil GCM nicht mehr verwendet wird). Und um Benachrichtigungen zu aktualisieren, verwenden Sie die sqlite-Datenbank zum Speichern der Benachrichtigungen mit Datum & Zeit. Löschen Sie die Benachrichtigung beim Lesen & löschen Sie es auch aus der Datenbank.