亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android webview加載https鏈接錯(cuò)誤或無(wú)響應(yīng)的解決

 更新時(shí)間:2020年03月25日 09:22:13   作者:想你依然心痛  
這篇文章主要介紹了Android webview加載https鏈接錯(cuò)誤或無(wú)響應(yīng)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近做無(wú)線WiFi的時(shí)候,在最后認(rèn)證成功的時(shí)候會(huì)彈出一個(gè)廣告頁(yè),于是用webview去加載了一下,結(jié)果沒(méi)反應(yīng),打印url出來(lái)看了一下,發(fā)現(xiàn)是https格式的,在使用WebView加載https資源文件時(shí),如果認(rèn)證證書不被Android認(rèn)可,那么會(huì)出現(xiàn)無(wú)法成功加載對(duì)應(yīng)資源問(wèn)題。那么,我們就要針對(duì)這一狀況作出對(duì)應(yīng)的處理。

于是百度了一下,這里記錄一下,給大家做個(gè)參考:

1、設(shè)置WebView接受所有網(wǎng)站的證書

在認(rèn)證證書不被Android所接受的情況下,我們可以通過(guò)設(shè)置重寫WebViewClient的onReceivedSslError方法在其中設(shè)置接受所有網(wǎng)站的證書來(lái)解決,重寫WebView的onReceivedSslError方法,添加handler.proceed方法,但App如果上架GooglePlay會(huì)被警告的。所以建議使用以下的第二個(gè)方法。

具體代碼如下:

webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
});

注:在重寫WebViewClient的onReceivedSslError方法時(shí),注意一定要去除onReceivedSslError方法的super.onReceivedSslError(view, handler, error);,否則設(shè)置無(wú)效。

2、啟用mixed content

Android webView 從 Lollipop 開始默認(rèn)不開MixedContentMode,因此,我們開啟即可滿足我們大多數(shù)需求。

webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings()
.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
});

在Android5.0中,WebView方面做了些修改,如果你的系統(tǒng)target api為21以上:

系統(tǒng)默認(rèn)禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分別啟用。

系統(tǒng)現(xiàn)在可以智能選擇HTML文檔的portion來(lái)繪制。這種新特性可以減少內(nèi)存footprint并改進(jìn)性能。若要一次性渲染整個(gè)HTML文檔,可以調(diào)用這個(gè)方法enableSlowWholeDocumentDraw(),如果你的app的target api低于21:系統(tǒng)允許mixed content和第三方cookie,并且總是一次性渲染整個(gè)HTML文檔。

在使用WebView的類中添加如下代碼:

// android 5.0以上默認(rèn)不支持Mixed Content
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
 webView.getSettings().setMixedContentMode(
  WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}

結(jié)果:

我的問(wèn)題并不是出現(xiàn)在這些地方,而是出現(xiàn)了在加載Url時(shí),部分Url使用的事http而不是https,導(dǎo)致無(wú)法加載,功能實(shí)現(xiàn)不了。那么要求后臺(tái)開發(fā)人員把http改成https。就這樣,成功了?;蛘哌€可以使用一些第三方庫(kù)來(lái)加載也行。

測(cè)試:

1、調(diào)用高德地圖沒(méi)法顯示,前端工程師用了http……那么改為https

2、部分功能沒(méi)實(shí)現(xiàn),因?yàn)楹笈_(tái)的沒(méi)有加證書…..那么,全部改回http

補(bǔ)充知識(shí):Android WebView加載網(wǎng)頁(yè)鏈接遇到的那些坑

本來(lái)覺(jué)得十分簡(jiǎn)單的問(wèn)題,結(jié)果遇到了不少坑,到現(xiàn)在都不敢保證不出問(wèn)題,只是解決了大部分問(wèn)題。。。

下面是列出幾個(gè)問(wèn)題

在webview中跳轉(zhuǎn)別的頁(yè)面無(wú)響應(yīng)

在webview中下載文件無(wú)響應(yīng)

部分網(wǎng)址鏈接無(wú)法顯示

部分網(wǎng)址打開自動(dòng)跳轉(zhuǎn)到瀏覽器

1.在webview中跳轉(zhuǎn)別的頁(yè)面無(wú)響應(yīng)

修改之前代碼如下:

 WebSettings webSettings = webView.getSettings();
 //設(shè)置WebView屬性,能夠執(zhí)行Javascript腳本
 webSettings.setJavaScriptEnabled(true);
 //設(shè)置可以訪問(wèn)文件
 webSettings.setAllowFileAccess(true);
 //設(shè)置支持縮放
 webSettings.setBuiltInZoomControls(true);
 webView.loadUrl(link);

 webView.setWebViewClient(new webViewClient ());

修改之后加了不少webview的設(shè)置包括:

webSettings.setAppCacheEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.supportMultipleWindows();
webSettings.setAllowContentAccess(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setSavePassword(true);
webSettings.setSaveFormData(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setLoadsImagesAutomatically(true);

webView.setWebChromeClient(new WebChromeClient());//這行最好不要丟掉

當(dāng)然,這些屬性可能有些不是必須要添加的,為了盡量滿足多種需求,所以我都添加了。

修改完成后就可以在webview中跳轉(zhuǎn)別的url鏈接了,就算是解決了第一個(gè)問(wèn)題吧。

2.在webview中下載文件無(wú)響應(yīng)

因?yàn)楸旧韜ebview不具備下載功能,所以需要讓系統(tǒng)處理或者自定義下載。

webview給我們提供了一個(gè)下載監(jiān)聽接口,下面我們來(lái)實(shí)現(xiàn)下載處理:

class MyDownLoad implements DownloadListener {
  @Override
  public void onDownloadStart(String url, String userAgent,
         String contentDisposition, String mimetype, long contentLength) {
   if (url.endsWith(".apk")) {
    /**
    * 通過(guò)系統(tǒng)下載apk
    */
    Uri uri = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW,uri);
    startActivity(intent);
   }
  }
 }

然后再設(shè)置中添加:

webView.setDownloadListener(new MyDownLoad());

這里是將下載功能交給系統(tǒng)來(lái)處理了,并沒(méi)有特殊需求所以就不自定義了。

3.部分網(wǎng)址鏈接無(wú)法顯示,報(bào)錯(cuò)net::err_unknown_url_scheme

由于我們有時(shí)候自定義了WebViewClient,內(nèi)容大致如下:

private class webViewClient extends WebViewClient {
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
   view.loadurl(url)//返回true代表在當(dāng)前webview中打開,返回false表示打開瀏覽器
   return super.shouldOverrideUrlLoading(view,url);  }

  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
   if(!dialog.isShowing()) {
    dialog.show();
   }
   super.onPageStarted(view, url, favicon);
  }

  @Override
  public void onPageFinished(WebView view, String url) {
   if(dialog.isShowing()){
    dialog.dismiss();
   }
   super.onPageFinished(view, url);
  }
 }

注意shouldOverrideUrlLoading方法,平時(shí)我們可能會(huì)在其中設(shè)置view.loadurl(url),正是這句代碼導(dǎo)致部分網(wǎng)頁(yè)打不開,這可能是webview的本身加載網(wǎng)頁(yè)有限制吧。所以我把這句去掉了,在返回時(shí)返回了true(true表示在當(dāng)前webview中打開網(wǎng)頁(yè),false則更傾向于瀏覽器打開網(wǎng)頁(yè))。這樣做,發(fā)現(xiàn)部分網(wǎng)頁(yè)仍然打不開。于是直接刪掉了webView.setWebViewClient(new webViewClient ()),而webView.setWebChromeClient(new WebChromeClient())不能刪,結(jié)果網(wǎng)頁(yè)是打開了,但有的則自動(dòng)跳轉(zhuǎn)到瀏覽器打開的。但我們的需求是不要打開瀏覽器。。。

4.部分網(wǎng)址打開自動(dòng)跳轉(zhuǎn)到瀏覽器

接到上面所講,打開部分網(wǎng)址跳轉(zhuǎn)到瀏覽器了,如何不讓他跳轉(zhuǎn)呢,返回true可以禁止跳轉(zhuǎn),但部分網(wǎng)址在webview中無(wú)法打開,接下來(lái),不給它直接返回true或false了,而是返回super,讓它父類處理,結(jié)果也并沒(méi)有調(diào)到瀏覽器并且網(wǎng)頁(yè)也打開了,現(xiàn)在暫時(shí)就這樣結(jié)尾了做到了大部分網(wǎng)址的兼容。

總結(jié):本人對(duì)webview了解也是有限,所以并不深入只是解決部分問(wèn)題,可能理解也有偏差,如有問(wèn)題請(qǐng)見諒。希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android本地存儲(chǔ)方法淺析介紹

    Android本地存儲(chǔ)方法淺析介紹

    這篇文章主要介紹了Android本地存儲(chǔ)案例,方法簡(jiǎn)單可以實(shí)現(xiàn)存儲(chǔ)并達(dá)到節(jié)省內(nèi)存的效果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • Android 如何本地加載pdf文件

    Android 如何本地加載pdf文件

    本篇文章主要介紹了Android本地加載pdf文件的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Android編程實(shí)現(xiàn)從字符串中查找電話號(hào)碼的方法

    Android編程實(shí)現(xiàn)從字符串中查找電話號(hào)碼的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)從字符串中查找電話號(hào)碼的方法,涉及Android針對(duì)字符串的匹配與查找相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • Android編程實(shí)現(xiàn)滑動(dòng)按鈕功能詳解

    Android編程實(shí)現(xiàn)滑動(dòng)按鈕功能詳解

    這篇文章主要介紹了Android編程實(shí)現(xiàn)滑動(dòng)按鈕功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android實(shí)現(xiàn)滑動(dòng)按鈕的功能、布局及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • Android ListView彈性效果的實(shí)現(xiàn)方法

    Android ListView彈性效果的實(shí)現(xiàn)方法

    這篇文章主要為大家詳細(xì)介紹了Android ListView彈性效果的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android  MeasureSpec的理解和源碼的解析

    Android MeasureSpec的理解和源碼的解析

    這篇文章主要介紹了Android MeasureSpec的理解和源碼的解析的相關(guān)資料,希望通過(guò)本文大家可以掌握理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • HorizontalScrollView水平滾動(dòng)控件使用方法詳解

    HorizontalScrollView水平滾動(dòng)控件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了HorizontalScrollView水平滾動(dòng)控件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android實(shí)現(xiàn)錄音靜音降噪

    Android實(shí)現(xiàn)錄音靜音降噪

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)錄音靜音降噪,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android入門之Fragment的使用教程

    Android入門之Fragment的使用教程

    Fragment是Android3.0后引入的一個(gè)新的API,他出現(xiàn)的初衷是為了適應(yīng)大屏幕的平板電腦。本文主要來(lái)和大家講講Fragment的使用,感興趣的小伙伴可以了解一下
    2022-12-12
  • Android簡(jiǎn)易音樂(lè)播放器實(shí)現(xiàn)代碼

    Android簡(jiǎn)易音樂(lè)播放器實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了Android簡(jiǎn)易音樂(lè)播放器的實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評(píng)論