android webview開發(fā):下載

使用場(chǎng)景

webview加載網(wǎng)址的時(shí)候 如果碰到非網(wǎng)頁類型,未做處理的話,webview會(huì)報(bào)錯(cuò)(出現(xiàn)瀏覽器崩潰的界面)。
這是因?yàn)閣ebview無法加載非網(wǎng)頁類型界面,導(dǎo)致界面崩潰,但是瀏覽器內(nèi)部有相關(guān)api。

  webview.setDownloadListener(DownloadListener listener)

只要設(shè)置這個(gè)監(jiān)聽事件,就可以在要發(fā)生下載請(qǐng)求的時(shí)候,進(jìn)行下載。

使用接口

在DownloadListener這個(gè)接口里可以可以實(shí)現(xiàn)下載的方法。
重寫下載的onDownloadStart()方法就行了

   void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength);
  //url         String:應(yīng)下載的內(nèi)容的完整URL
  //userAgent   String:用于下載的用戶代理。
  //contentDisposition  String:Content-disposition http標(biāo)頭,如果存在。
  //mimetype    String:服務(wù)器報(bào)告的內(nèi)容的mimetype
  //contentLength   long:服務(wù)器報(bào)告的文件大小

實(shí)現(xiàn)方法

ps:不管用啥方法,都要注意androidM的動(dòng)態(tài)權(quán)限問題;

推薦方案(最方便)

系統(tǒng)自帶的DownloadManager
 DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
                    // 允許媒體掃描,根據(jù)下載的文件類型被加入相冊(cè)、音樂等媒體庫
                    request.allowScanningByMediaScanner();
                    // 設(shè)置通知的顯示類型,下載進(jìn)行時(shí)和完成后顯示通知
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    // 設(shè)置通知欄的標(biāo)題,如果不設(shè)置,默認(rèn)使用文件名
                    request.setTitle("下載完成");
                    // 設(shè)置通知欄的描述
//                    request.setDescription("This is description");
                    // 允許在計(jì)費(fèi)流量下下載
                    request.setAllowedOverMetered(true);
                    // 允許該記錄在下載管理界面可見
                    request.setVisibleInDownloadsUi(true);
                    // 允許漫游時(shí)下載
                    request.setAllowedOverRoaming(true);

                    String fileName = URLUtil.guessFileName(url, contentDisposition, mimeType);
                    Log.e("fileName:{}", fileName);
                    request.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory() + "/Download/", fileName);


                    final DownloadManager downloadManager = (DownloadManager) iWebView.getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
                    // 添加一個(gè)下載任務(wù)
                    long downloadId = downloadManager.enqueue(request);

ps:不需要判斷androidN的URI的問題哦

另外也可以用okhttps進(jìn)行下載也很方便~(稍微注意下androidN的問題)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,656評(píng)論 1 32
  • ips 由于WebView的用法實(shí)在太多,如果您只是想查詢某個(gè)功能的使用——建議Ctrl+F(Commad+F)在...
    LouisLau_6d51閱讀 1,457評(píng)論 0 12
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,315評(píng)論 4 61
  • 6.去任總家里光耀集團(tuán)最近忙著這個(gè)季度的中標(biāo),這次中標(biāo)勢(shì)在必行。關(guān)系疏通打點(diǎn),產(chǎn)品競爭這些都要維護(hù)好,若是拿下這個(gè)...
    一顆桑葚閱讀 353評(píng)論 0 0
  • 百家宴是二階開課前的晚上,大家從全國各地帶著家鄉(xiāng)的特產(chǎn)聚合到一起聯(lián)歡,吃美食,看表演。開心的笑,大聲的唱,歡樂的舞...
    ruyi66閱讀 947評(píng)論 3 9

友情鏈接更多精彩內(nèi)容