Android 为什么打开外部浏览器窗口的意图不起作用,而是在web视图中打开?
我有一个Android SDK,它使用web视图显示一些页面,但根据请求的链接,我让它打开一个外部浏览器。我正在使用WebView的Android 为什么打开外部浏览器窗口的意图不起作用,而是在web视图中打开?,android,android-intent,android-browser,Android,Android Intent,Android Browser,我有一个Android SDK,它使用web视图显示一些页面,但根据请求的链接,我让它打开一个外部浏览器。我正在使用WebView的shouldOverrideUrlLoading方法,如果它是要从外部打开的链接,我使用: Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); 这在一个演示应用程序中对我们有效,但有人集成了我们的SDK,说它正在web视图中打开。我无法访问他
shouldOverrideUrlLoading
方法,如果它是要从外部打开的链接,我使用:
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
这在一个演示应用程序中对我们有效,但有人集成了我们的SDK,说它正在web视图中打开。我无法访问他们的代码,但是开发人员可以做些什么来阻止默认操作打开外部浏览器?我想到了两种可能的解决方案,我发现:
Intent i = new Intent(Intent.ACTION_VIEW);
Bundle b = new Bundle();
b.putBoolean("new_window", true); //sets new window
i.putExtras(b);
i.addCategory(Intent.CATEGORY_BROWSABLE);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.setData(Uri.parse(url));
startActivity(i);
更好的解决方案是什么?还是我遗漏了什么?“但是有人集成了我们的SDK,说它在web视图中打开了”--可能会,这取决于
shouldOverrideUrlLoading()
方法中的其他内容。“使用一些标志来确保没有使用现有的任务”--这不太可能有帮助,我不知道你从哪里得到了new\u窗口
位。“另一个解决方案是强制在chrome浏览器中打开”--这不太可能有帮助,而且在当前用户无法使用chrome的设备上,它会失败。“最好的解决方案是什么?”--找出报告的行为发生的原因。@Commonware 1。我的局限性在于,我们无法访问应用程序的代码,也不想给其他开发者带来太多麻烦。您建议如何调试这样的东西?我之所以在这里发帖,是因为我觉得有点受不了。2.为什么强制打开chrome浏览器可能没有帮助?3.我假设绝大多数安卓用户要么使用Chrome浏览器,要么在亚马逊设备上使用“Silk”浏览器,不是吗?“我的局限性在于我们无法访问应用程序的代码”——但shouldOverrideUrlLoading()
在您自己的代码中,对吗?特别是,你要返回什么?“不想太打扰其他开发人员”——没有可复制的测试用例,你知道,其他开发人员都喝醉了。“您建议如何调试这样的东西?”--您需要找出某种可复制的测试用例,可能需要其他开发人员的帮助。例如,问题是否仅限于某些特定的设备型号?如果是这样的话,那就动手吧。“为什么强制打开chrome浏览器不太可能有帮助?”——出于某种原因,控制权仍保留在你的应用程序中,不会转移到其他应用程序。说“我想启动这个特定的浏览器”不太可能比“我想启动任何Web浏览器”有所改进。“我假设绝大多数安卓用户要么有Chrome浏览器,要么有“丝绸”浏览器(如果是亚马逊的设备),不是吗?”——例如,在中国分布的大多数安卓设备都没有。个人用户可能无法访问Chrome(例如,我禁用它并亲自使用Firefox Klar)。@commonware“但是shouldOverrideUrlLoading()在您自己的代码中,对吗?”正确。根据我是否开始新活动,我返回true或false。开发人员向我发送了他们应用程序的APK,问题发生在我自己的测试设备上,我在测试应用程序中使用的设备没有问题。这就是为什么我相信这与他们的代码有关。关于过渡,你提出了一个很好的观点。谢谢你的想法。我将添加更多调试日志,并要求他们向我发送另一个apk。