点击上方 "吴小龙同学", 星标或置顶
7:45 不见不散, 多点在看, 此乃真爱
引语
早上好, 还是我猫咪, 我的公众号「躲角落的猫咪」会推荐 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 idPRDownloader.cancel(downloadId);// The tag can be set to any request and then can be used to cancel the requestPRDownloader.cancel(TAG);// Cancel all the requestsPRDownloader.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
来源: https://juejin.im/entry/5c91b9c2f265da611f1d850d