1

我在理解活动堆栈以及它如何影响我的应用程序的行为方面遇到了一些问题。

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

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

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);
}

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

提前致谢!

4

2 回答 2

5

试试这样:

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

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

但是,它还取决于您从哪里调用 openUrlExternal() 。如果您在活动启动时调用它,它仍然会将您带回浏览器,但如果您从事件侦听器(即按钮单击)调用它,那么当您重新启动应用程序时不应调用它。

于 2012-08-06T16:30:33.683 回答
1

我认为接受的答案并不完全正确。这取决于您打算做什么(不是双关语,呵呵)。

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

UsingIntent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET意味着用户从应用程序抽屉启动时将返回到上一个活动。

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

于 2014-04-29T18:22:05.250 回答