【问题标题】:Open Browser as Intent but don't keep it on the Activity stack以 Intent 方式打开浏览器,但不要将其保留在 Activity 堆栈中
【发布时间】:2012-08-03 15:33:05
【问题描述】:

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

单击按钮后,它会启动一个打开浏览器的 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);
}

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

提前致谢!

【问题讨论】:

  • 您不使用ActivityWebView 并自己处理所有事情是否有特殊原因?
  • 是的,有一个特殊的原因。

标签: android browser android-intent activity-stack


【解决方案1】:

试试这样:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多