这两天项目里面使用到了下载文件这个功能,于是我在github上面找了一下,发现一个star得最多的一个框架用的人特别多,于是我就在自己的代码里面写了一个单例,用来专门针对单个文件进行下载的类。
关于FileDownLoader这个下载引擎在这里我就不多做介绍了,具体可以打开github上的地址:FileDownLoader 查看~
使用FileDownLoader
如果使用的是AndroidStudio开发工具,需要在项目中引用:
compile 'com.liulishuo.filedownloader:library:1.3.0'
然后在Application.Oncreate 中进行全局初始化
public XXApplication extends Application{
...
@Override
public void onCreate() {
/**
* 仅仅是缓存Application的Context,不耗时
*/
FileDownloader.init(getApplicationContext);
}
...
}
1.单任务下载
<span style="font-size:14px;">package com.kuaibao.skuaidi.manager;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.FileDownloadListener;
import com.liulishuo.filedownloader.FileDownloader;
/**
* Created by gudd
* on 2016/10/27.
* compile 'com.liulishuo.filedownloader:library:1.3.0'
*/
public class FileDownloaderManager {
public static FileDownloaderManager instance = null;
private FileDownloaderManager() {
}// 避免类在外部被实例化
public static FileDownloaderManager getInstance() {
if (null == instance) {
instance = new FileDownloaderManager();
}
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.downLoadComplated(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) {
//在下载队列中(正在等待/正在下载)已经存在相同下载连接与相同存储路径的任务
}
};
}
// 这里是下载过程中的回调,由于下载过程中,我们只需要知道文件是否下载完成、文件是否下载失败、还有文件下载进度,</span>
<span style="font-size:14px;">所以这里只自定义三个方法用于回调
public interface FileDownLoaderCallBack{
void downLoadComplated(BaseDownloadTask task);
void downLoadError(BaseDownloadTask task, Throwable e);
void downLoadProgress(BaseDownloadTask task, int soFarBytes, int totalBytes);
}
}</span>
所以,你在使用的时候只需要使用一行代码就可以下载文件了:
FileDownloaderManager.getInstance().startDownLoadFileSingle("下载地址",“保存地址”,new FileDownLoaderCallBack({
......
}));
2.多任务下载(下次更新)