一、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);

}

});

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐