我正在编写一个在后台运行服务的应用程序。此服务接收意图以执行某些操作,然后在另一个线程中执行这些操作。 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_FAIL
。 getIntExtra()
返回0.
我做错了什么?
答案 0 :(得分:3)
PendingIntent.getService(context, 0, intent, 0)
将其替换为:
PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
如果仍然认为较早的等效PendingIntent
未完成,则getService()
会有效地返回现有PendingIntent
。 FLAG_UPDATE_CURRENT
将取代附加内容。