Android WebView无法加载alipays://协议链接怎么办?

Android WebView无法加载alipays://协议链接怎么办?

android webview加载alipays://协议链接失败的解决方案

在Android开发中,WebView有时无法加载自定义URL scheme,例如alipays://,导致出现net::err_unknown_url_scheme错误,即使重写了shouldOverrideUrlLoading方法,onReceivedError回调中仍然返回errorCode -10。这是因为WebView默认不支持所有自定义URL scheme。

解决方法的关键在于正确处理shouldOverrideUrlLoading方法。以下是一个改进的代码示例:

首先,确保你的WebView已设置WebViewClient:

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);                 return true; // 阻止WebView加载,已处理             } catch (ActivityNotFoundException e) {                 // 支付宝未安装                 e.printStackTrace();                 //  此处可添加提示用户安装支付宝的逻辑                 return true; // 阻止WebView加载,已处理             }         }         return super.shouldOverrideUrlLoading(view, url); // 其他协议交给WebView处理     }      @Override     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {         super.onReceivedError(view, errorCode, description, failingUrl);         //  此处可添加错误处理逻辑,例如显示错误信息     } });

这段代码的核心是shouldOverrideUrlLoading方法。当URL以”alipays://”开头时,它创建Intent启动支付宝应用处理该URL。try-catch块处理了支付宝未安装的情况。return true;至关重要,它告知WebView已处理该URL,无需默认加载行为。 onReceivedError方法用于处理其他加载错误。

通过此方法,可以正确拦截并处理自定义URL scheme,避免net::err_unknown_url_scheme错误。请检查你的shouldOverrideUrlLoading方法实现是否与示例一致,并确保应用拥有必要权限。

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