一、FileDownLoader
关于FileDownLoader下载引擎可以看github,地址:FileDownLoader
二、使用样例(AS工程)
1、AndroidManifest.xml里声明所需权限:
2、app的buil.gradle中添加依赖:
implementation 'com.liulishuo.filedownloader:library:1.7.7'
3、 在Application的onCreate函数里进行FileDownLoader的初始化:
/**
* @author: cwang
* @time: 2019/12/1618:03
* @Description:
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// FileDownloader初始化
FileDownloader.setupOnApplicationOnCreate(this);
}
}
4、FileDownloadUtils工具类
package com.cwang.utils;
import android.util.Log;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.FileDownloadListener;
import com.liulishuo.filedownloader.FileDownloader;
/**
* @author: cwang
* @time: 2019/12/1616:53
* @Description:文件下载,支持断点续传
*/
public class FileDownloadUtils {
private final String TAG = FileDownloadUtils.class.getName();
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) {
Log.i(TAG, "DownloadTask pending 等待,已经进入下载队列");
//等待,已经进入下载队列
}
@Override
protected void progress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//下载进度回调
if (callBack != null) {
callBack.downLoadProgress(task, soFarBytes, totalBytes);
}
}
@Override
protected void completed(BaseDownloadTask task) {
Log.i(TAG, "DownloadTask completed 完成整个下载过程");
//完成整个下载过程
if (callBack != null) {
callBack.downLoadCompleted(task);
}
}
@Override
protected void paused(BaseDownloadTask task, int soFarBytes, int totalBytes) {
//暂停下载
Log.i(TAG, "DownloadTask paused 暂停下载");
}
@Override
protected void error(BaseDownloadTask task, Throwable e) {
// Log.e(TAG, "DownloadTask error");
//下载出现错误
if (callBack != null) {
callBack.downLoadError(task, e);
}
}
@Override
protected void warn(BaseDownloadTask task) {
Log.i(TAG, "DownloadTask warn 在下载队列中(正在等待/正在下载)已经存在相同下载连接与相同存储路径的任务");
//在下载队列中(正在等待/正在下载)已经存在相同下载连接与相同存储路径的任务
}
};
}
public interface FileDownLoaderCallBack {
//文件是否下载完成
void downLoadCompleted(BaseDownloadTask task);
//文件是否下载失败
void downLoadError(BaseDownloadTask task, Throwable e);
//文件下载进度
void downLoadProgress(BaseDownloadTask task, int soFarBytes, int totalBytes);
}
}
5、调用文件下载函数:
final String Tag = ”FileDownloadUtilsTag”;
final String loadUrl = ”https://www.xxxx.com/file/....“; // 下载文件的服务器地址
final String filePath = ”/sdcard/myFile.txt“; // 本地存储下载文件的绝对地址
FileDownloadUtils.getInstance().startDownLoadFileSingle(loadUrl, filePath, new FileDownloadUtils.FileDownLoaderCallBack() {
@Override
public void downLoadCompleted(BaseDownloadTask task) {
// 下载完成
Log.i(Tag, "DownloadTask downLoadCompleted");
}
@Override
public void downLoadError(BaseDownloadTask task, Throwable e) {
// 下载出现错误
Log.e(Tag, "loadNewAPK onError:" + e.getMessage());
}
@Override
public void downLoadProgress(BaseDownloadTask task, int soFarBytes, int totalBytes) {
// 下载进度
Log.i(Tag, "DownloadTask downLoadProgress: " + soFarBytes + " / " + totalBytes);
}
});