Android使用FileDownLoader实现文件下载功能

2022-06-21 14:27:15

这两天项目里面使用到了下载文件这个功能,于是我在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

  • 作者:yushuangping
  • 原文链接:https://blog.csdn.net/yushuangping/article/details/84038582
    更新时间:2022-06-21 14:27:15