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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM