5

Ho un'implementazione di notifica GCM che funziona perfettamente. Ma i problemi sono una volta che il messaggio è stato ricevuto nell'intento nel metodo ricevuto, il messaggio mostrato è sempre il vecchio messaggio. Questo è il 'extras.getString ("payload")' mostra sempre il vecchio messaggio. Non riesco a capire quale sia il problema.GCM Android Push Notification mostra sempre il vecchio messaggio. Intenzione ricevuta errata

La classe, che invia la notifica GCM è:

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class C2DMMessageReceiver extends BroadcastReceiver { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
          String action = intent.getAction(); 
          Log.w("C2DM", "Message Receiver called"); 
          if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) { 
              Log.w("C2DM", "Received message"); 
              String payload = intent.getStringExtra("payload"); 
              Log.d("C2DM", "dmControl: payload = " + payload); 
              // TODO Send this to my application server to get the real data 
              // Lets make something visible to show that we received the message 
              createNotification(context, payload); 
          } 
      } 



      public void createNotification(Context context, String payload) { 
          NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
          Notification notification = new Notification(R.drawable.icon, 
                  "Message sent!", System.currentTimeMillis()); 
          // Hide the notification after its selected 
          //notification.flags |= Notification.FLAG_AUTO_CANCEL; 
          notification.ledARGB = 0xff00ff00; 
          notification.ledOnMS = 300; 
          notification.ledOffMS = 1000; 
          notification.flags |= Notification.FLAG_SHOW_LIGHTS; 


          Intent intent = new Intent(context, MessageReceivedActivity.class); 
          intent.putExtra("payload", payload); 
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
          intent.putExtra("NotifID", 1); 
          PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent, 0); 
          notification.setLatestEventInfo(context, "Message","Message Recieved", pendingIntent); 
          notificationManager.notify(0, notification); 
      } 

}

La classe, che riceve il messaggio di notifica è:

import android.app.Activity; 
import android.app.NotificationManager; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.widget.TextView; 

public class MessageReceivedActivity extends Activity { 
      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
          setContentView(R.layout.activity_result); 
          NotificationManager notificationManager = (NotificationManager) this 
                  .getSystemService(Context.NOTIFICATION_SERVICE); 
          //---cancel the notification--- 
          int id=getIntent().getExtras().getInt("NotifID"); 
          notificationManager.cancelAll();  
          Bundle extras = getIntent().getExtras(); 
          if (extras != null) { 
              String message = extras.getString("payload"); 
              if (message.equals("call")) { 
                  Intent intent = new Intent(Intent.ACTION_CALL); 
                  intent.setData(Uri.parse("tel:9916261960")); 
                  startActivity(intent); 
              } else if (message.equals("camera")) { 
                  Intent cameraIntent = new Intent(
                          MediaStore.ACTION_IMAGE_CAPTURE); 
                  startActivity(cameraIntent); 
              } else { 
                  if (message != null && message.length() > 0) { 
                      TextView view = (TextView) findViewById(R.id.result); 
                      view.setText(message); 
                  } 
              } 
          } 
          super.onCreate(savedInstanceState); 
      } 

}

Qui, gli extra .getString ("payload"); tiene la prima volta il messaggio di notifica inviato sempre.

risposta

12

Quando si crea il vostro intento in attesa, utilizzare la FLAG_UPDATE_CURRENT

PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

In caso contrario, il vecchio intento è riutilizzato senza i nuovi extra

+0

Lavori. Grazie. – jasdmystery

+0

Sto avendo lo stesso problema. ma "FLAG_UPDATE_CURRENT" non funziona per me. Sto ancora ricevendo il vecchio messaggio. – viji

+0

funziona per me, grazie – TheMan

1

cercare di prendere il vostro intento all'interno

@Override protetta onNewIntent vuoto (Intento intenzionale) {

super.onNewIntent(intent); 

    Bundle extras = intent.getExtras(); 
    fromScreen = getIntent().getIntExtra("FROMSCREEN", 
      Config.SHARE_SCREEN_TAG); 
//enter code here 

}