轉自:http://blog.csdn.net/crazy_zihao/article/details/51557425
前言
在使用WebView加載https資源文件時,如果認證證書不被Android認可,那么會出現無法成功加載對應資源問題。那么,我們就要針對這一狀況作出對應的處理。
解決步驟
1. 啟用mixed content
在Android5.0中,WebView方面做了些修改,如果你的系統target api為21以上:
- 系統默認禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。
- 系統現在可以智能選擇HTML文檔的portion來繪制。這種新特性可以減少內存footprint並改進性能。若要一次性渲染整個HTML文檔,可以調用這個方法enableSlowWholeDocumentDraw()
- 如果你的app的target api低於21:系統允許mixed content和第三方cookie,並且總是一次性渲染整個HTML文檔。
在使用WebView的類中添加如下代碼: -
- // android 5.0以上默認不支持Mixed Content
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- webView.getSettings().setMixedContentMode(
- WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
- }
2. 設置WebView接受所有網站的證書
在認證證書不被Android所接受的情況下,我們可以通過設置重寫WebViewClient的onReceivedSslError方法在其中設置接受所有網站的證書來解決,具體代碼如下:
- webView.setWebViewClient(new WebViewClient() {
- @Override
- public void onReceivedSslError(WebView view,
- SslErrorHandler handler, SslError error) {
- // TODO Auto-generated method stub
- // handler.cancel();// Android默認的處理方式
- handler.proceed();// 接受所有網站的證書
- // handleMessage(Message msg);// 進行其他處理
- }
- });
注:在重寫WebViewClient
的onReceivedSslError
方法時,注意一定要去除onReceivedSslError
方法的super.onReceivedSslError(view, handler, error);
,否則設置無效。