从Android WebView的URL打开外部应用

时间:2019-12-05 12:19:55

标签: android webview

在我的Android应用上,我使用WebView展示购买流程。在最后一步中,询问付款方式,并且如果安装了几个选项,则将触发新应用的启动。在我们的用例中,最突出的示例是MobilePay。

当流程使用的是经典浏览器(例如Chrome)时,该页面实际上会打开“付款服务提供商”应用。当我通过WebView进行操作时,不会发生这种情况。

我知道这个问题与其他问题类似,例如thisthis,但是他们的解决方案是拦截该链接,然后在Chrome或标准浏览器中打开它。这不适用于我的情况,因为我需要能够在付款提供商的应用程序完成其课程后返回该应用程序,以显示确认屏幕。

如何让浏览器具有与WebView中的chrome相同的行为,并在需要时让其打开应用?

我已经尝试了许多webview设置,例如:

webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.getSettings().setSupportMultipleWindows(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);

我还已经以这种方式覆盖shouldOverrideUrlLoading

public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    String url = request.getUrl().toString();
    return handleUrl(view, url);
}

private boolean handleUrl(WebView view, String url) {
    /*I do some things here, but basically: */
    view.loadUrl(url);
    return true;
}

1 个答案:

答案 0 :(得分:0)

您可以尝试以下吗?

覆盖WebViewClient.shouldOverrideUrlLoading()并手动测试URL是否使用您的URI方案,启动您的应用程序,如果匹配则返回true,否则返回false。