開源安卓Http文件下載框架file-downloader的使用


file-downloader

    FileDownloader(https://github.com/wlfcolin/file-downloader)是本人開源的一個安卓Http文件下載框架,是根據自己的經驗總結的一套非常輕量級的安卓通用Http文件下載管理器。我的目標是讓文件下載越簡單越好,盡可能以最簡潔明了的方式完成復雜需求。亦可以查看github上的最新中文描述

一、特點

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

二、非常適合的使用場景

  • 1、需要多頁面多方位同步下載進度和下載狀態(比如商店APP,A頁面開啟點擊下載,B頁面和C頁面也可以看到下載進度和暫停這個下載,而D頁面 可以刪除這個下載,無論哪個頁面有操作,其它頁面都會收到響應的回調進行更新,並且還可能還需要常駐一個service來把下載情況同步發送到通知欄的)

  • 2、需要斷點續傳節約流量(比如做批量應用更新APP、單個應用自己更新下載新版本、做影視需要批量緩存視頻的APP,做MP3歌曲下載APP)

  • 3、專門做下載的(比如迅雷之類的APP,需要下載任何服務器上的東西,並且兼顧下載效率和開發效率的)

三、截圖

  • image
  • image

四、快速上手使用

  • 第一步、在項目模塊的build.gradle配置gradle

compile 'org.wlf:FileDownloader:0.3.1'

eclipse用戶,可以在這里下載jar包: FileDownloader-0.3.1.jarFileDownloader-0.3.1-sources.jar

  • 第二步、在你的應用application的onCreate()中初始化FileDownloader

// 1、創建Builder
Builder builder = new FileDownloadConfiguration.Builder(this);

// 2.配置Builder
// 配置下載文件保存的文件夾
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);
  • 第三步、注冊監聽器(如果不需要監聽,可以忽略),監聽器是基於觀察者模式設計的全局監聽器,可以設置多個,記得在不需要的時候取消注冊

  • -注冊下載狀態監聽器(一般在fragment或activity的onCreate方法中注冊,如果你使用service,請查看在Service中使用FileDownloader)
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.getType()會是一樣的

        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()
    }
};
FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener);
  • -注冊文件數據變化監聽器,監聽比如文件不存在了,被刪除了,狀態變化了等任何與文件數據變化相關都會收到通知
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) {
        // 一個下載文件被刪除,也許你需要同步你自己的數據存儲,比如在你的業務數據庫中刪除一條記錄
    }
};
FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener);

下載狀態監聽器和文件數據變化監聽器的主要區別在於,前者關心下載進度和錯誤(前端UI),后者關心文件數據變化(數據存儲)

  • 第四步、下載文件和管理文件

  • -創建一個新下載
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.delete(url, true, mOnDeleteDownloadFileListener);// 刪除單個下載文件
FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);// 刪除多個下載文件
  • -重命名下載文件
FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);// 重命名一個下載文件
  • 第五步、取消注冊的監聽器

  • -取消注冊下載狀態監聽器(一般在fragment或activity的onDestroy方法中取消注冊)
FileDownloader.unregisterDownloadStatusListener(mOnFileDownloadStatusListener);
  • -取消注冊文件數據變化監聽器
FileDownloader.unregisterDownloadFileChangeListener(mOnDownloadFileChangeListener);

五、詳細API文檔

六、版本更新日志

 

歡迎加入QQ討論群:479868413

 


免責聲明!

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



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