Android 如何下載檔案並輕鬆顯示進度?

引語
早上好,還是我貓咪,我的公眾號「躲角落的貓咪」會推薦 GitHub 上好玩的專案,挖掘開源的價值,歡迎關注我,每週二、週四 7:45 打卡,不見不散。
在開發 Android 應用程式的大部分時間裡,我們遇到了一個常見的用例,即在 Android 中下載檔案並在進度對話方塊中顯示進度,這裡面難點是斷點續傳。
今天推薦一個開源庫 PRDownloader ,可以很容易地解決這個問題。PRDownloader 可用於下載任何型別的檔案,如影象,視訊,pdf,apk 等;支援在下載檔案時暫停和繼續;支援大檔案下載;許多請求可以並行進行等。
PRDownloader 使用
首先,在 build.gradle 中新增它:
compile 'com.mindorks.android:prdownloader:0.5.0'
如果已經不存在,請不要忘記在清單中新增 Internet 許可權:
<uses-permission android:name="android.permission.INTERNET" />
然後在 onCreate() 應用程式類的方法中初始化它:
PRDownloader.initialize(getApplicationContext());
通過一些自定義來初始化它
// Enabling database for resume support even after the application is killed: PRDownloaderConfig config = PRDownloaderConfig.newBuilder() .setDatabaseEnabled(true) .build(); PRDownloader.initialize(getApplicationContext(), config); // Setting timeout globally for the download network requests: PRDownloaderConfig config = PRDownloaderConfig.newBuilder() .setReadTimeout(30_000) .setConnectTimeout(30_000) .build(); PRDownloader.initialize(getApplicationContext(), config);
發出下載請求:
int downloadId = PRDownloader.download(url, dirPath, fileName) .build() .setOnStartOrResumeListener(new OnStartOrResumeListener() { @Override public void onStartOrResume() { } }) .setOnPauseListener(new OnPauseListener() { @Override public void onPause() { } }) .setOnCancelListener(new OnCancelListener() { @Override public void onCancel() { } }) .setOnProgressListener(new OnProgressListener() { @Override public void onProgress(Progress progress) { } }) .start(new OnDownloadListener() { @Override public void onDownloadComplete() { } @Override public void onError(Error error) { } });
它有一個回撥 onProgress ,我們獲取下載進度,可用於顯示進度對話方塊中的進度。
暫停下載請求
PRDownloader.pause(downloadId);
恢復下載請求
PRDownloader.resume(downloadId);
取消下載請求
// Cancel with the download id PRDownloader.cancel(downloadId); // The tag can be set to any request and then can be used to cancel the request PRDownloader.cancel(TAG); // Cancel all the requests PRDownloader.cancelAll();
下載請求的狀態
Status status = PRDownloader.getStatus(downloadId);
如果啟用了資料庫,則清理恢復的檔案
// Method to clean up temporary resumed files which is older than the given dayPRDownloader.cleanUp(days);
原始碼地址
https://github.com/MindorksOpenSource/PRDownloader
免費獲取安卓開發架構的資料(包括Fultter、高階UI、效能優化、架構師課程、 NDK、Kotlin、混合式開發(ReactNative+Weex)和一線網際網路公司關於android面試的題目彙總可以加:936332305 / 連結:點選連結加入 【安卓開發架構】
