在开发中,经常遇到文件下载,版本更新等功能。花了几天时间用RxJava2、Retrofit2 实现了一个文件下载库。效果图如下:
主要实现了
- 文件的下载、暂停、删除、恢复下载功能
- 多文件的全部开始、全部暂停、全部删除下载任务功能
- 支持自定义同时进行下载的最大线程数量:默认3个
- 支持自定义本地下载路径
- 支持断点续传:库中实现了数据库结构,用于保存每条下载纪录的信息
- 封装动态权限帮助类:可直接使用请求相关权限
compile 'com.mickywu:filedownlibrary:1.0.0'
FileDown.init(this);
mHelper = DownloadHelper.getInstance();
如果你需要下载状态的相关信息,还需要在页面上注册监听(推荐在onStart()注册):
mHelper.registerListener(this);
如果你注册了监听,页面销毁的时候,一定要解除监听(在onStop()解除)
mHelper.unRegisterListener();
实现相关接口方法:
/**
* 开始下载
* @param url
*/
void start(String url);
/**
* 暂停下载
* @param url
*/
void pause(String url);
/**
* 下载进度
* @param read 已下载大小
* @param contentLength 总大小
* @param done 是否完成
* @param url 下载连接
* @param kbs 下载速度 kb/s
*/
void progress(long read, long contentLength, boolean done, String url,long kbs);
/**
* 等待下载
* @param url 下载连接
*/
void wait(String url);
/**
* 下载完成
* @param url 下载连接
*/
void complete(String url, File file);
/**
* 下载完成
* @param url
*/
void error(String url, String msg);
/**
* 删除任务
* @param url
*/
void delete(String url);
开始下载:
mHelper.start(url);
暂停下载:
mHelper.pause(url);
恢复下载(暂停状态恢复下载状态):
mHelper.resume(url);
删除下载:
mHelper.delete(url);
设置最大线程数:
mHelper.setMaxTask(4);
设置文件保存路径:
mHelper.setSavePath(mSaveFilePath);
- 初始化并发起权限申请
mPermissionHelper = new PermissionHelper(this, this);
mPermissionHelper.requestPermissions();
- 实现如下接口:
@Override
public int getPermissionsRequestCode() {
// //设置权限请求requestCode,只有不跟onRequestPermissionsResult方法中的其他请求码冲突即可
return 10000;
}
@Override
public String[] getPermissions() {
///设置该界面所需的全部权限
return new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
}
@Override
public void requestPermissionsSuccess() {
// 请求成后方可以下载,这里没有处理相关逻辑
}
@Override
public void requestPermissionsFail() {
}
- 在Activity中实现onRequestPermissionsResult回掉
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(mPermissionHelper.requestPermissionsResult(requestCode, permissions, grantResults)){
//权限请求结果,并已经处理了该回调
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
方法名 | 作用 |
---|---|
getInstance() | 静态方法,以单列方式获取下载帮助类对象 |
setSavePath(String localPath) | 设置文件保存路径 |
setMaxTask(int count) | 设置最大下载进程数(同时可以下载的最大数量,默认三个) |
registerListener(DownloadListener listener) | 注册监听,回掉当前下载状态 |
unRegisterListener() | 解除监听,与registerListener配对使用,页面销毁时调用,防止内存泄漏 |
start(String url) | 开始单个文件下载 |
start(List list) | 开始多个下载任务 |
pause(String url) | 暂停单个下载任务 |
pauseAll() | 暂停所有进行中的任务 |
resume(String url) | 恢复下载任务(暂停状态恢复下载) |
delete(String url) | 删除下载任务 |
deleteAll() | 删除所有下载任务 |
getLocalFilePathFromUrl(String url) | 根据下载链接获取本地存储路径 |
SpeedUtils:
方法名 | 作用 |
---|---|
FormetFileSize(long file) | long类型的下载速度转换为字符串“b/s、kb/s、m/s、g/s” |
如果使用中遇到什么问题,请联系邮箱:1354319679@qq.com