通过Intent.putExtra设置的值不会持续存在

时间:2017-03-21 23:45:14

标签: android android-intent

我正在编写一个在后台运行服务的应用程序。此服务接收意图以执行某些操作,然后在另一个线程中执行这些操作。 Intent.putExtra()用于包含有关应该执行的操作的信息。

如果某个操作失败,则会创建一个通知,告知用户。通知包括"重试"按钮,可用于重试失败的操作。

这样做如下,其中intent是最初用于启动服务的Intent:

intent.putExtra(EXTRA_LAST_FAIL, 1234);

new Notification.Builder(context)
        ...
        .addAction(
                R.drawable.ic_action_retry,
                context.getString(R.string.action_retry),
                PendingIntent.getService(context, 0, intent, 0)
        )
        ...

我的期望是,在将数据传递给服务时,意图将包含新数据(EXTRA_LAST_FAIL),但事实并非如此:

int lastFail = intent.getIntExtra(EXTRA_LAST_FAIL, 0);
if (lastFail != 0) {
    Log.d(TAG, "action failed last time");
}

但是,尽管将值设置为上面的1234,但重新传递的意图不包含EXTRA_LAST_FAILgetIntExtra()返回0.

我做错了什么?

1 个答案:

答案 0 :(得分:3)

PendingIntent.getService(context, 0, intent, 0)

将其替换为:

PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)

如果仍然认为较早的等效PendingIntent未完成,则getService()会有效地返回现有PendingIntentFLAG_UPDATE_CURRENT将取代附加内容。