如何强制一个活动使用我传递给它的意图附加信息?

3

我有一组活动,并使用以下代码将主活动带入“活动”状态:

Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.putExtra("clearCache", true);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);

问题在于当我尝试检索"clearCache"额外数据时,调用"getIntent().getExtras()"会返回null。
我的理解是因为我要启动的活动已经在堆栈上了,并且我设置了 "Intent.FLAG_ACTIVITY_CLEAR_TOP" 标志,所以返回的Intent将是原始Intent。
我如何在我要启动的活动中访问调用的Intent?
2个回答

4
在Google有关FLAG_ACTIVITY_CLEAR_TOP的文档中,每次应获取新的意图:
“如果设置并且要启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将其上面的所有其他活动关闭,并将此Intent作为新Intent传递给(现在处于顶部的)旧活动。”

...

在上述示例中,当前运行的B活动实例将在其onNewIntent()方法中接收您在此处启动的新意图,或者它本身将被完成并重新启动以使用新意图。如果它已声明其启动模式为“多个”(默认值),并且您没有在相同的意图中设置FLAG_ACTIVITY_SINGLE_TOP,则它将被完成并重新创建;对于所有其他启动模式或如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此意图将传递给当前实例的onNewIntent()。
更多细节请看这里:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

希望有所帮助!

2
谢谢!重写onNewIntent()方法并从那里处理新的意图解决了我的问题。 - Ryan

0

你只需要通过传递特定的Activity名称来更改你的代码,然后保持其余代码不变即可。

Intent i = new Intent(MapActivity.this, MainActivity.class);
                        i.putExtra("clearCache", true);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接