如何强制活动使用我传递的意图附加内容?

时间:2013-03-25 14:01:50

标签: android

我有一堆活动,并使用以下代码将主要活动置于“活动”状态:

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

问题在于,当我尝试检索clearCache extra时,对getIntent().getExtras()的调用返回null。

我的理解是因为我正在启动的活动已经在堆栈中,并且因为我设置了Intent.FLAG_ACTIVITY_CLEAR_TOP标志,所以返回的Intent将是原始意图。

如何在我正在启动的活动中访问调用意图?

2 个答案:

答案 0 :(得分:3)

在FLAG_ACTIVITY_CLEAR_TOP的google文档中,您应该每次都获得新的意图:

“如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是将关闭其上的所有其他活动,并将此Intent传递给作为新意图的(现在在顶部)旧活动。“

...

“上面示例中当前运行的活动B实例将接收您在其onNewIntent()方法中启动的新意图,或者本身已完成并使用新意图重新启动。如果已声明其启动模式如果是“多个”(默认值)并且您没有在同一意图中设置FLAG_ACTIVITY_SINGLE_TOP,那么它将被完成并重新创建;对于所有其他启动模式或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传递到当前实例onNewIntent()。“

有关详细信息,请查看此处:

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

希望有所帮助!

答案 1 :(得分:0)

您只需通过传递特定的活动名称来更改您的代码,并保持其余代码不变,

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