使用较旧数据的Android推送通知

时间:2014-06-19 22:16:56

标签: android push-notification

我有一个不寻常的问题,我的推送通知正在使用旧推送通知中的数据,我想。我的应用程序有一个公司列表,我使用数据推送通知,以便当用户点击通知时,它会将他们带到我的应用程序中的该公司。在测试时,我发送的第一条消息可以正常工作并将我带到正确的公司。当我发送另一条应该发送到另一家公司的消息时,它会转到第一条消息。我知道应用程序正在接收正确的信息,因为当我记录公司ID时,它与预期的匹配。但是,当通过单击通知打开应用程序时,日志中显示的公司ID不正确。

这是处理通知的代码

private void sendNotification(String title, String msg, String cat, String comp) {
    mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);

    Log.i("Send notif",""+comp);

    Intent launch = new Intent(this, AccountSetup.class);
    launch.putExtra("cat", cat).putExtra("comp", comp);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            launch, 0);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.ic_launcher)
    .setContentTitle(title)
    .setStyle(new NotificationCompat.BigTextStyle()
    .bigText(msg))
    .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}

这正如预期的那样工作,这是我用于将信息提取出来的代码onCreate()

    Intent thispage = getIntent();
    if(thispage.getStringExtra("comp") != null ) {
        Log.i("mainactivity extras","received cat " + thispage.getIntExtra("cat", 11) + " comp " + thispage.getStringExtra("comp"));
        mainPage.putExtra("currentLocation", user._Location)
            .putExtra("selectedCategory", thispage.getIntExtra("cat", 11))
            .putExtra("selectedCompany", -1)
            .putExtra("companyID",  thispage.getStringExtra("comp"));
    }

这就是我遇到问题的地方,当活动启动时,它仍然具有旧的公司ID,无论我点击了什么推送通知消息。

我错过了什么吗?消息的标题和正文是正确的,日志显示公司ID也是正确的,就在我点击它时,意图额外只显示第一条消息中发送的内容。

2 个答案:

答案 0 :(得分:2)

我也面临着类似的问题。我通过使用PendingIntent.Flagoneshot解决了它。这是我的代码中的一行:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            intent, PendingIntent.FLAG_ONE_SHOT);

有5种类型的pendingintent标志,如果不是这一种,其中一种可能对你有效。

答案 1 :(得分:0)

请注意,活动将在现有活动的上下文之外启动,因此您必须在Intent中使用Intent.FLAG_ACTIVITY_NEW_TASK启动标志。试试吧。