GCM android推送通知始终显示旧消息。意图收到不正确

时间:2012-11-16 07:04:44

标签: android android-intent android-c2dm google-cloud-messaging

我有一个完美的GCM通知实现。但是,问题是一旦在接收到的方法中意图收到消息,所显示的消息始终是旧消息。那就是'extras.getString(“payload”)'总是显示旧消息。我似乎无法弄清问题是什么。

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

}

收到通知消息的类是:

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

}

这里,extras.getString(“payload”);始终保持第一次发送通知消息。

2 个答案:

答案 0 :(得分:12)

创建待定意图时,请使用FLAG_UPDATE_CURRENT

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

否则旧的意图在没有新的额外内容的情况下重复使用

答案 1 :(得分:1)

尝试在

中获取你的意图

@覆盖 protected void onNewIntent(Intent intent){

super.onNewIntent(intent);

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

}