我怎么能在Android中做到这一点.Activity - > WebBrowser - > Acrivity,但Press Back看不到WebBrowser

HiM*_*ing 6 android

我怎么能这样做Web浏览器调用自定义方案来启动一个活动,然后我想按下后退按钮但不返回Web浏览器.

我只想在调用Web浏览器时实现转发,然后调用我的方案来启动另一个Activity.当我回来时,我不想看到网络浏览器.

我该怎么办?

Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.setData(Uri.parse(url));
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

我已经添加了它,但它不起作用!

Ang*_*raX 7

正如其他用户所解释的那样,您的Activity正在浏览器的堆栈上创建.您无法阻止浏览器在其自己的堆栈上打开,但您可以在应用程序上执行相同的配置.

在浏览器调用的活动中,在清单文件中添加以下内容:

android:allowTaskReparenting="true"
android:launchMode="singleTask"
Run Code Online (Sandbox Code Playgroud)

这将使您的活动在您的应用程序堆栈(而不是浏览器)上创建.这基本上会使您的应用程序回到正面.

android:launchMode ="singleTop"不起作用,因为只有当该活动位于堆栈顶部时才会阻止创建新活动,而浏览器是当前位于顶部的浏览器不是这种情况.android:launchMode ="singleTask"将确保不会创建其他实例,无论它们是否在顶部.

如果您使用上面的配置设置Intent.FLAG_ACTIVITY_NO_HISTORY,那么一切都应该正常工作,无论之前是否打开过浏览器.在最坏的情况下,浏览器将位于堆栈的底部,如果您继续回击,最终会到达浏览器而不是退出应用程序.


use*_*618 0

发生这种情况可能是因为第二个活动启动到您启动浏览器的同一任务中,这意味着启动第二个活动将返回到已经存在的任务,并将最顶层的活动(活动 1)推送到后台堆栈。看这里

如果您让第二个活动在不同的任务上启动,则按“后退”应该结束该任务并返回到后面的任务,即浏览器。

为此,您可以FLAG_ACTIVITY_NEW_TASK在启动活动 2 的意图中使用,或在清单中设置活动的android:launchMode属性。singleTop