android webview加載alipays://協(xié)議鏈接失敗的解決方案
在Android開發(fā)中,WebView有時無法加載自定義URL scheme,例如alipays://,導致出現(xiàn)net::err_unknown_url_scheme錯誤,即使重寫了shouldOverrideUrlLoading方法,onReceivedError回調(diào)中仍然返回errorCode -10。這是因為WebView默認不支持所有自定義URL scheme。
解決方法的關(guān)鍵在于正確處理shouldOverrideUrlLoading方法。以下是一個改進的代碼示例:
首先,確保你的WebView已設(shè)置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); // 其他協(xié)議交給WebView處理 } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); // 此處可添加錯誤處理邏輯,例如顯示錯誤信息 } });
這段代碼的核心是shouldOverrideUrlLoading方法。當URL以”alipays://”開頭時,它創(chuàng)建Intent啟動支付寶應用處理該URL。try-catch塊處理了支付寶未安裝的情況。return true;至關(guān)重要,它告知WebView已處理該URL,無需默認加載行為。 onReceivedError方法用于處理其他加載錯誤。
通過此方法,可以正確攔截并處理自定義URL scheme,避免net::err_unknown_url_scheme錯誤。請檢查你的shouldOverrideUrlLoading方法實現(xiàn)是否與示例一致,并確保應用擁有必要權(quán)限。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END