Android WebView无法加载alipays:// scheme怎么办?

Android WebView无法加载alipays:// scheme怎么办?

android webview加载alipays:// scheme失败的解决方案

在Android应用开发中,WebView常用于加载网页内容。然而,加载自定义URL scheme(例如alipays://)时,经常遇到net::err_unknown_url_scheme错误,即使重写了shouldOverrideUrlLoading方法,onReceivedError回调中仍可能返回errorCode为-10的错误。这是因为WebView默认不支持自定义URL scheme,需要特殊处理。

本文提供有效的解决方案。关键在于正确重写WebViewClient的shouldOverrideUrlLoading方法,拦截并处理自定义URL scheme。

一些开发者可能已尝试重写shouldOverrideUrlLoading,但仍未解决问题。这是因为实现方法可能存在错误。正确的实现如下:

首先,为WebView设置WebViewClient,并重写shouldOverrideUrlLoading方法。在这个方法中,判断URL是否以”alipays://”开头。如果是,则创建一个Intent,使用Intent.ACTION_VIEW和Uri.parse(url)启动支付宝应用。如果支付宝应用未安装,则会捕获ActivityNotFoundException异常。最后,返回true表示已处理该URL,WebView无需继续加载。如果不是自定义scheme,则调用父类的shouldOverrideUrlLoading方法,让WebView使用默认行为。

以下代码片段演示了正确的实现:

webView.setWebViewClient(new WebViewClient() {     @Override     public boolean shouldOverrideUrlLoading(WebView view, String url) {         if (url.startsWith("alipays://")) {             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));             try {                 startActivity(intent);             } catch (ActivityNotFoundException e) {                 // 处理支付宝应用未安装的情况,例如提示用户安装                 Toast.makeText(context, "请安装支付宝", Toast.LENGTH_SHORT).show();             }             return true;         }         return super.shouldOverrideUrlLoading(view, url);     } });

通过以上代码,WebView就能正确处理alipays:// scheme的URL,避免net::err_unknown_url_scheme错误。 可以根据实际需求调整ActivityNotFoundException的异常处理方式,例如向用户显示更友好的错误提示。 onReceivedError方法在此示例中已省略,因为错误处理已在shouldOverrideUrlLoading中完成。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享