2016-08-19 4 views
5

Я реализую push-уведомления на Android. Проблема возникает, когда я хочу обновлять свои уведомления. Я хотел бы добавить уведомления, чтобы, если уведомление видно, я просто обновляю его и делаю это.Обновление Push Notification Android

mNotifyBuilder.setContentText(currentText) 
    .setNumber(++numMessages); 

Но каждый раз, когда я получаю уведомление, ++ numMessages устанавливается на 0 перед суммированием. Мне нужно это, чтобы подвести итог, откуда он был оставлен, если на экране есть уведомление. Вот код:

//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 

     } 
    } 

} 

ответ

2

В общем, вы не должны ожидать, что ваши значения полей сохранится на несколько вызовов onMessageReceived, поскольку услуга может быть убит ОС, чтобы освободить память.

Предлагаю хранить ваши сообщения в базе данных. Всякий раз, когда вы получаете новое сообщение, вставьте его в базу данных и удалите его, когда пользователь его прочитает. Затем вы можете легко запросить количество непрочитанных сообщений.

0

Я предлагаю вам использовать FCM вместо GCM (поскольку GCM больше не будет использоваться). И для обновления уведомлений используйте базу данных sqlite для хранения уведомлений с датой & времени. очистите уведомление при чтении & также удалите его из базы данных.