1

我已经实现了一个使用此 c2dm 代码http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html的小演示。它可以工作。我正在从服务器获取推送通知,但问题是每当我从服务器发送通知时它发送旧通知。它只会在我注册我的 android 设备并将注册 ID 发送到服务器时发送当前的新通知。请建议我应该是什么问题。提前谢谢..

4

2 回答 2

1

据我记得,当我自己遵循 Lars Vogel 的教程时,我遇到了同样的问题。其实不是你说的问题。

尝试在 onReceive() 函数中放置一个断点,以手动查看您获得的有效负载。在我的情况下,消息是好的,但MessageReceivedActivity不是,它总是显示坏消息。

super.onCreate()MessageReceivedActivity 中的方法放在方法之上。

它是怎样的:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_result);
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String message = extras.getString("payload");
        if (message != null && message.length() > 0) {
            TextView view = (TextView) findViewById(R.id.result);
            view.setText(message);
        }
    }

    super.onCreate(savedInstanceState);
}

应该如何:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_result);
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String message = extras.getString("payload");
        if (message != null && message.length() > 0) {
            TextView view = (TextView) findViewById(R.id.result);
            view.setText(message);
        }
    }
}
于 2012-05-07T14:39:42.590 回答
0

@RaulGogo 的回答有点帮助,但没有为我解决问题。要在此处查看此解决方案 https://stackoverflow.com/a/10079537/264618并阅读下面的评论。

通常在 C2DMMessageReceiver 类中更改此代码:

int ukey = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(context, ukey,
            intent, 0);

并将其添加到 MessageReceivedActivity 类中:

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);//important!

注意: setIntent(intent) 调用使用当前数据刷新意图。

于 2012-05-28T08:32:36.377 回答