我在理解活动堆栈及其对我的应用程序的影响方面遇到了一些问题。
单击按钮后,它会启动一个打开浏览器的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);
}
我使用错误的旗帜吗?如果是这样,我必须使用哪些标志?
提前致谢!
答案 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
表示用户从应用抽屉启动时将返回上一个活动。
在这两种情况下,再次启动应用程序将使您进入上一个活动。主要区别在于是否在应用切换器中显示了两个活动(或仅显示最后一个)。