5

Mam implementację powiadomienia GCM, która działa idealnie. Ale problemy pojawiają się, gdy wiadomość została odebrana w intencji w odebranej metodzie, komunikat jest zawsze stary. To jest "extras.getString (" payload ")" zawsze pokazuje starą wiadomość. Nie mogę się zorientować, jaki jest problem.GCM Android Push Notification pokazuje zawsze starą wiadomość. Intencja otrzymana niepoprawnie

Klasa, która wysyła powiadomienia GCM jest:

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

}

Klasa, która otrzyma powiadomienia jest:

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

}

Tutaj dodatki .getString ("ładunek"); zawsze pierwszy raz wysyła powiadomienie.

Odpowiedz

12

Tworząc oczekiwaniu intencję, użyj FLAG_UPDATE_CURRENT

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

przeciwnym razie stare intencją jest wykorzystywany bez nowych dodatków

+0

Działa. Dziękuję Ci. – jasdmystery

+0

Mam ten sam problem. ale "FLAG_UPDATE_CURRENT" nie działa dla mnie. Nadal otrzymuję starą wiadomość. – viji

+0

działa dla mnie, dziękuję – TheMan

1

spróbować sprowadzić swoją intencję wewnątrz

@Override protected void onNewIntent (Zamiar celowy) {

super.onNewIntent(intent); 

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

}

Powiązane problemy