android webview 訪問https頁面 SslError 處理

Android中,WebView能夠用來加載http和https網頁到本地應用的控件。可是在默認狀況下,經過loadUrl(String url)方法,能夠順利loadUrl(「http://www.baidu.com」)之類的頁面。可是,當load經過ssl加密的https頁面,可是若是這個網站的安全證書在Android沒法獲得認證,WebView就會變成一個空白頁,而並不會像自帶的瀏覽器同樣彈出提示。所以,咱們必須針對這種狀況進行處理。java

Android 2.2及更高方法
android

首先說的是Android 2.2及更高的處理方式,在2.2及以上系統中處理只須要重載WebViewClient 的 onReceivedSslError便可。web

首先須要import兩個類:瀏覽器

1
2
import  android.net.http.SslError ;
import  android.webkit.SslErrorHandler ;

而後複製這段代碼,去掉須要項的註釋。安全

1
2
3
4
5
6
7
8
9
WebView webview  =  (WebView ) findViewById (R. id. webview ) ;
webview. setWebViewClient ( new WebViewClient ( )  {
    @Override
     public  void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error )  {
         //handler.cancel(); 默認的處理方式,WebView變成空白頁
         //handler.process();接受證書
         //handleMessage(Message msg); 其餘處理
     }
} ) ;

若是當重載函數裏面是process()時,系統就會忽略證書的錯誤繼續Load頁面內容,不會顯示空白頁面。ide


Android 2.1及如下方法
可是,重載WebViewClient 的 onReceivedSslError只能在2.2以上系統中使用,2.1和如下系統壓根就沒有SslError的類。不過這好辦,咱們能夠直接複製2.2系統中的WebViewClient.Java 和 SslError.java 文件。

下載地址傳送門:
WebViewClient.java:http://www.oschina.NET/code/explore/android-2.2-froyo/android/webkit/WebViewClient.java
SslError.java:http://www.oschina.Net/code/explore/android-2.2-froyo/android/net/http/SslError.java

咱們只要把上面兩個文件下載來並import到須要處理SSL的活動中,而後import進來便可。這樣就能夠像2.2以上的系統同樣處理便可。
函數