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 / 链接:点击链接加入【安卓开发架构】

发布了482 篇原创文章 · 获赞 84 · 访问量 22万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览