app 下載更新 file-downloader 文件下載庫的簡單介紹和使用

来源:https://www.cnblogs.com/geaosu/archive/2018/04/16/8855918.html
-Advertisement-
Play Games

app 下載更新 file-downloader 文件下載庫的簡單介紹和使用 ...


app 下載更新 file-downloader 文件下載庫的簡單介紹和使用

 

今天介紹一個下載庫:file-downloader 文件下載庫

 

說明:

  * 本文內容來自原 file-downloader 文件下載庫 的GitHub項目地址;

  * 我在這裡做了更詳細的整理;

  * 下麵會羅列原項目以及原作者的信息。

 

項目地址:
  * GitHub:https://github.com/wlfcolin/file-downloader

介紹:
  * FileDownloader是安卓上輕量級Http/Https文件下載框架,我的目標是讓安卓文件下載越簡單越好,儘可能以最簡潔明瞭的方式完成複雜需求。

特點:
  * 多任務並行下載
  * 自動斷點續傳
  * 失敗自動重試機制
  * 支持大文件(超過2G)下載
  * 強大方便的異常處理和異常恢復機制
  * 輕鬆管理下載文件的生命周期(下載文件的增刪改查)等

適合的使用場景:
  1. 需要多頁面多方位同步下載進度和下載狀態

    * 比如商店APP,A頁面開啟點擊下載,B頁面和C頁面也可以看到下載進度和暫停這下載,而D頁面 可以刪除這個下載;

    * 無論哪個頁面有操作,其它頁面都會收到響應的回調進行更新;

    * 並且還可能還需要常駐一個service來把下載情況同步發送到通知欄的;
  2. 需要斷點續傳節約流量(比如做批量應用更新APP、單個應用自己更新下載新版本、做影視需要批量緩存視頻的APP,做MP3歌曲下載APP);
  3. 專門做下載的(比如迅雷之類的APP,需要下載任何伺服器上的東西,並且兼顧下載效率和開發效率的)

效果展示(圖片來自原項目GitHub):
  * git圖1:https://raw.githubusercontent.com/wlfcolin/file-downloader/master/capture/simple_download_zh.gif

   * git圖2:https://raw.githubusercontent.com/wlfcolin/file-downloader/master/capture/manager_download_zh.gif

 

詳細API文檔
  * http://htmlpreview.github.io/?https://raw.githubusercontent.com/wlfcolin/file-downloader/master/download/release/FileDownloader-0.3.2-javadoc/index.html

版本更新日誌
  * https://github.com/wlfcolin/file-downloader/blob/master/CHANGELOG.md

關於作者:
  * 博客園:http://www.cnblogs.com/wlfcolin

 

 

  使用:  
  1. 添加依賴
  2. 初始化
  3. 設置監聽器
  4. 文件管理

1. 添加依賴:
  * 在mode的build.gradle中添加依賴: compile 'org.wlf:FileDownloader:0.3.2'

2. 初始化:
  * 在application的onCreate()中初始化FileDownloader;
  * 初始化代碼:
  * 封裝到一個方法中,在onCreate方法中調用該方法即可;
    initDownload();

//初始化下載庫:如果需要更改apk的保存文件夾,修改configFileDownloadDir方法中的參數即可;
private void initDownload(){
    // 1.創建Builder
    Builder builder = new FileDownloadConfiguration.Builder(this);

    // 2.配置Builder
    // 配置下載文件保存的文件夾: FileDownloader
    builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "FileDownloader");
    // 配置同時下載任務數量,如果不配置預設為2
    builder.configDownloadTaskSize(3);
    // 配置失敗時嘗試重試的次數,如果不配置預設為0不嘗試
    builder.configRetryDownloadTimes(5);
    // 開啟調試模式,方便查看日誌等調試相關,如果不配置預設不開啟
    builder.configDebugMode(true);
    // 配置連接網路超時時間,如果不配置預設為15秒
    builder.configConnectTimeout(25000);// 25秒

    // 3.使用配置文件初始化FileDownloader
    FileDownloadConfiguration configuration = builder.build();
    FileDownloader.init(configuration);
}


3. 監聽器:
說明:
  * 如果不需要監聽,可以忽略;
  * 監聽器是基於觀察者模式設計的全局監聽器,可以設置多個;
  * 記得在不需要的時候取消註冊;
  * 步驟:
  1. 註冊:
    * 在activity或者fragment的onCreate方法中註冊;
    * 如果使用service,請查說明:https://github.com/wlfcolin/file-downloader/blob/master/USEINSERVICE-zh.md
  2. 註銷:
    * 在activity或者fragment銷毀的時候註銷即可;
    * 分類:監聽器有兩個:
    * 第一個是用來監聽下載狀態的監聽器
    * 第二個是用來監聽數據變化的監聽器
    * 文件數據變化監聽器,監聽比如文件不存在了,被刪除了,狀態變化了等任何與文件數據變化相關都會收到通知;
    * 下載狀態監聽器和文件數據變化監聽器的主要區別在於,前者關心下載進度和錯誤(前端UI),後者關心文件數據變化(數據存儲);

 

3.1 第一個監聽器的代碼:下載狀態的監聽器

// 1. 創建 - 監聽器
private OnFileDownloadStatusListener mOnFileDownloadStatusListener = new OnSimpleFileDownloadStatusListener() {
    @Override
    public void onFileDownloadStatusRetrying(DownloadFileInfo downloadFileInfo, int retryTimes) {
        // 正在重試下載(如果你配置了重試次數,當一旦下載失敗時會嘗試重試下載),retryTimes是當前第幾次重試
    }
    @Override
    public void onFileDownloadStatusWaiting(DownloadFileInfo downloadFileInfo) {
        // 等待下載(等待其它任務執行完成,或者FileDownloader在忙別的操作)
    }
    @Override
    public void onFileDownloadStatusPreparing(DownloadFileInfo downloadFileInfo) {
        // 準備中(即,正在連接資源)
    @Override
    public void onFileDownloadStatusPrepared(DownloadFileInfo downloadFileInfo) {
        // 已準備好(即,已經連接到了資源)
    }
    @Override
    public void onFileDownloadStatusDownloading(DownloadFileInfo downloadFileInfo, float downloadSpeed, long
            remainingTime) {
        // 正在下載,downloadSpeed為當前下載速度,單位KB/s,remainingTime為預估的剩餘時間,單位秒
    }
    @Override
    public void onFileDownloadStatusPaused(DownloadFileInfo downloadFileInfo) {
        // 下載已被暫停
    }
    @Override
    public void onFileDownloadStatusCompleted(DownloadFileInfo downloadFileInfo) {
        // 下載完成(整個文件已經全部下載完成)
    }
    @Override
    public void onFileDownloadStatusFailed(String url, DownloadFileInfo downloadFileInfo, FileDownloadStatusFailReason failReason) {
        // 下載失敗了,詳細查看失敗原因failReason,有些失敗原因你可能必須關心
        String failType = failReason.getType();
        String failUrl = failReason.getUrl();// 或:failUrl = url,url和failReason.getUrl()會是一樣的

        if(FileDownloadStatusFailReason.TYPE_URL_ILLEGAL.equals(failType)){
            // 下載failUrl時出現url錯誤
        }else if(FileDownloadStatusFailReason.TYPE_STORAGE_SPACE_IS_FULL.equals(failType)){
            // 下載failUrl時出現本地存儲空間不足
        }else if(FileDownloadStatusFailReason.TYPE_NETWORK_DENIED.equals(failType)){
            // 下載failUrl時出現無法訪問網路
        }else if(FileDownloadStatusFailReason.TYPE_NETWORK_TIMEOUT.equals(failType)){
            // 下載failUrl時出現連接超時
        }else{
            // 更多錯誤....
        }
        // 查看詳細異常信息
        Throwable failCause = failReason.getCause();// 或:failReason.getOriginalCause()

        // 查看異常描述信息
        String failMsg = failReason.getMessage();// 或:failReason.getOriginalCause().getMessage()
    }
};

// 2. 註冊 - 監聽器(在onCreate方法中註冊) FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener);

// 3. 註銷 - 監聽器(在onDestroy方法中註銷) FileDownloader.unregisterDownloadStatusListener(mOnFileDownloadStatusListener);


註意:將相應的代碼放在項目中對應的正確的位置

 

 


3.2 第二個監聽器的代碼:數據變化監聽器

// 1. 創建 - 監聽器
private OnDownloadFileChangeListener mOnDownloadFileChangeListener = new OnDownloadFileChangeListener() {
    @Override
    public void onDownloadFileCreated(DownloadFileInfo downloadFileInfo) {
        // 一個新下載文件被創建,也許你需要同步你自己的數據存儲,比如在你的業務資料庫中增加一條記錄
    }
    @Override
    public void onDownloadFileUpdated(DownloadFileInfo downloadFileInfo, Type type) {
        // 一個下載文件被更新,也許你需要同步你自己的數據存儲,比如在你的業務資料庫中更新一條記錄
    }
    @Override
    public void onDownloadFileDeleted(DownloadFileInfo downloadFileInfo) {
        // 一個下載文件被刪除,也許你需要同步你自己的數據存儲,比如在你的業務資料庫中刪除一條記錄
    }
};

// 2. 註冊 - 監聽器 FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener);

// 3. 註銷 - 監聽器 FileDownloader.unregisterDownloadFileChangeListener(mOnDownloadFileChangeListener);


註意:將相應的代碼放在項目中對應的正確的位置

 

 

 

4. api的簡單使用: 下載文件和管理文件

// 創建一個新下載: 如果文件沒下載過,創建並開啟下載,否則繼續下載,自動會斷點續傳(如果伺服器無法支持斷點續傳將從頭開始下載)
FileDownloader.start(url);
// 創建一個自定義保存路徑和文件名稱的下載
FileDownloader.detect(url, new OnDetectBigUrlFileListener() {
    @Override
    public void onDetectNewDownloadFile(String url, String fileName, String saveDir, long fileSize) {
        // 如果有必要,可以改變文件名稱fileName和下載保存的目錄saveDir
        FileDownloader.createAndStart(url, newFileDir, newFileName);
    }
    @Override
    public void onDetectUrlFileExist(String url) {
        // 繼續下載,自動會斷點續傳(如果伺服器無法支持斷點續傳將從頭開始下載)
        FileDownloader.start(url);
    }
    @Override
    public void onDetectUrlFileFailed(String url, DetectBigUrlFileFailReason failReason) {
        // 探測一個網路文件失敗了,具體查看failReason
    }
});

// 暫停下載
FileDownloader.pause(url);// 暫停單個下載任務
FileDownloader.pause(urls);// 暫停多個下載任務
FileDownloader.pauseAll();// 暫停所有下載任務

// 繼續下載:自動會斷點續傳(如果伺服器無法支持斷點續傳將從頭開始下載)
FileDownloader.start(url);

// 移動單個下載文件到新文件夾中
FileDownloader.move(url, newDirPath, mOnMoveDownloadFileListener);
// 移動多個下載文件到新文件夾中
FileDownloader.move(urls, newDirPath, mOnMoveDownloadFilesListener);

// 重命名下載文件
FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);

// 刪除單個下載文件
FileDownloader.delete(url, true, mOnDeleteDownloadFileListener);
// 刪除多個下載文件
FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CREATE FUNCTION getweekdayCount ( @month varchar(10)) RETURNS INT AS BEGIN--declare @month varchar(10)--set @month='201802' 通過月份得到本月有幾天周末DECLARE @DAYC ...
  • 在Android手機上, 在某個程式里,通過按Menu鍵,一般都會打開這個程式的設置,而在iOS里,系統提供了一個很好的保存程式設置的機制。就是使用Settings Bundle。 在按了HOME鍵的情況下,在第一頁的圖標中找到設置,會看到程式的設置都在這裡。那如何添加自己的程式的設置項呢? 1、添 ...
  • 界面效果: 佈局代碼: MainActivity: 讀寫文件工具類: ...
  • 在JavaEE中,有一個Junit測試包 而在開發安卓中,我們要使用谷歌公司開發好的一些類 代碼如下: 這裡要測試一個計算器類: 在配置文件下添加這一行: 在外部加上這幾行: 寫一個測試類: 測試成功! ...
  • 1:線性佈局 2.相對佈局: 這兩種最常用,其他的如下: 3.幀佈局:重疊在一起 後兩種不常用:表格、絕對佈局,實際開發已過時 ...
  • android kl(key layout)文件是一個映射文件,是標準linux與anroid的鍵值映射文件,kl文件可以有很多個,但是它有一個使用優先順序: 如果你沒有為設備單獨定義kl文件,那麼就會使用預設的那個Generic.kl文件。 例如: 還有一點需要註意,我們怎麼知道這個vendor號和 ...
  • 註意設置許可權: 佈局: 上邊採用的是按鈕點擊事件第一種:內部類 第二種:匿名內部類 第三種:實現介面(多按鈕時候推薦使用) 第四種:聲明方法 ...
  • 最近發現越來越多的朋友,在使用PC端的小程式多客服系統,有的朋友也在後臺問,有沒有一款,手機端的工具,那樣才是真正的隨時隨地處理客戶的消息。 剛好,有看到一款比較用心的手機端工具,特點具有類似QQ聊天界面,溝通無障礙,使用無門檻,回覆消息,快速高效。重點是收到新消息提醒,有提示音。 芝麻小客服 體驗 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...