Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么打开外部浏览器窗口的意图不起作用,而是在web视图中打开?_Android_Android Intent_Android Browser - Fatal编程技术网

Android 为什么打开外部浏览器窗口的意图不起作用,而是在web视图中打开?

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视图中打开。我无法访问他

我有一个Android SDK,它使用web视图显示一些页面,但根据请求的链接,我让它打开一个外部浏览器。我正在使用WebView的
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);
    
  • 这是否足够

  • 另一种解决方案是强制在chrome浏览器中打开,如下所示:

    Intent Intent=newintent(Intent.ACTION_视图,Uri.parse(urlString)); intent.addFlags(intent.FLAG\u活动\u新任务); setPackage(“com.android.chrome”); 背景。开始触觉(意图)


  • 更好的解决方案是什么?还是我遗漏了什么?

    “但是有人集成了我们的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。