这两天项目里面使用到了下载文件这个功能,于是我在github上面找了一下,发现一个star得最多的一个框架用的人特别多,下面是单个文件下载的使用
关于FileDownLoader这个下载引擎在这里我就不多做介绍了,具体可以打开github上的地址:FileDownLoader查看
我使用的是AndroidStudio进行开发的
在app的buil.gradle中添加依赖:
compile 'com.liulishuo.filedownloader:library:1.3.0'
然后在Application.Oncreate 中进行全局初始化
/**
* Created by YuShuangPing on 2018/11/10.
*/
public class MyApplication extends Application {
private static MyApplication application;
private static String token = "";
@Override
public void onCreate() {
super.onCreate();
application = this;
//Hawk存储初始化
Hawk.init(this).build();
// 不耗时,做一些简单初始化准备工作,不会启动下载进程
FileDownloader.init(this);
.........
接着是一个文件下载的工具类:
/**
* Created by YuShuangPing on 2018/11/12.
*/
public class FileDownloadUtils {
public static FileDownloadUtils instance = null;
public FileDownloadUtils() {
}
public static FileDownloadUtils getInstance() {
if (null == instance) {
instance = new FileDownloadUtils();
}
return instance;
}
/**
* 单任务下载
*
* @param downLoadUri 文件下载网络地址
* @param destinationUri 下载文件的存储绝对路径
*/
public void startDownLoadFileSingle(String downLoadUri, String destinationUri,FileDownLoaderCallBack callBack) {
FileDownloader.getImpl().create(downLoadUri).setPath(destinationUri).setListener(fileDownloadListener(callBack)).start();
}
// 下载方法
private FileDownloadListener fileDownloadListener(final FileDownLoaderCallBack callBack) {
return new FileDownloadListener() {
@Override
protected void pending(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//等待,已经进入下载队列
}
@Override
protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//下载进度回调
if (callBack != null){
callBack.downLoadProgress(task,soFarBytes,totalBytes);
}
}
@Override
protected void completed(BaseDownloadTask task) {
//完成整个下载过程
if (callBack != null){
callBack.downLoadCompleted(task);
}
}
@Override
protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//暂停下载
}
@Override
protected void error(BaseDownloadTask task, Throwable e) {
//下载出现错误
if (callBack != null){
callBack.downLoadError(task,e);
}
}
@Override
protected void warn(BaseDownloadTask task) {
//在下载队列中(正在等待/正在下载)已经存在相同下载连接与相同存储路径的任务
}
};
}
public interface FileDownLoaderCallBack {
//文件是否下载完成
void downLoadCompleted(BaseDownloadTask task);
//文件是否下载失败
void downLoadError(BaseDownloadTask task, Throwable e);
//文件下载进度
void downLoadProgress(BaseDownloadTask task, int soFarBytes, int totalBytes);
}
}
在代码中进行调用就可以下载文件了:
FileDownloadUtils.getInstance().startDownLoadFileSingle(downloadUrl, savePath,
new FileDownloadUtils.FileDownLoaderCallBack() {
@Override
public void downLoadCompleted(BaseDownloadTask task) {
LogUtils.LOGD("下载完成========");
}
@Override
public void downLoadError(BaseDownloadTask task, Throwable e) {
}
@Override
public void downLoadProgress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
}
});
对于多任务下载可以移步GitHub