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 分享