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