Android使用FileDownLoader实现文件下载——支持断点续传

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

 

你可能感兴趣的:(Android开发)