将浏览器作为Intent打开,但不要将其保留在Activity堆栈中

时间:2012-08-06 16:15:28

标签: android browser android-intent activity-stack

我在理解活动堆栈及其对我的应用程序的影响方面遇到了一些问题。

单击按钮后,它会启动一个打开浏览器的Intent。当我在浏览器中并按下主页按钮时,我会进入主屏幕。现在,如果我通过启动器再次启动我的应用程序,它将打开浏览器而不是我的应用程序。如何在启动应用程序时绕过打开浏览器?

现在,打开网址的代码如下所示:

private void openUrlExternal(String url) {
    Intent openUrlIntent = new Intent(Intent.ACTION_VIEW);
    openUrlIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    openUrlIntent.setData(Uri.parse(url));
    startActivity(openUrlIntent);
}

我使用错误的旗帜吗?如果是这样,我必须使用哪些标志?

提前致谢!

2 个答案:

答案 0 :(得分:4)

试试这样:

openUrlIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
openUrlIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

这应该取消浏览器任务与您自己的关联,这意味着当您重新启动它时,它应该转到您的Activity而不是浏览器。

但是它还取决于你从哪里调用openUrlExternal()。如果你在活动启动时调用它,它仍然会带你回到浏览器,但如果你从一个事件监听器(即按钮点击)调用它,那么当你重新启动你的应用程序时它不会被调用。 / p>

答案 1 :(得分:1)

我不认为接受的答案是完全正确的。这取决于你的意图(没有双关语意图,嘿)。

使用Intent.FLAG_ACTIVITY_NEW_TASK表示已启动的活动与启动活动完全分开。特别是,您可以使用“应用”按钮切换到旧活动,而无需退出新活动。

使用Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET表示用户从应用抽屉启动时将返回上一个活动。

在这两种情况下,再次启动应用程序将使您进入上一个活动。主要区别在于是否在应用切换器中显示了两个活动(或仅显示最后一个)。