File-downloader框架详解

胡博艺
2023-12-01

引入

compile 'org.wlf:FileDownloader:0.3.1'

application的onCreate()中初始化FileDownloader

// 创建Builder
FileDownloadConfiguration.Builder builder = new FileDownloadConfiguration.Builder(this);

// 配置Builder
// 配置下载文件保存的文件夹
builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +
        "FileDownloader");
// 配置同时下载任务数量,如果不配置默认为2
builder.configDownloadTaskSize(3);
// 配置失败时尝试重试的次数,如果不配置默认为0不尝试
builder.configRetryDownloadTimes(5);
// 开启调试模式,方便查看日志等调试相关,如果不配置默认不开启
builder.configDebugMode(true);
// 配置连接网络超时时间,如果不配置默认为15秒
builder.configConnectTimeout(25000);// 25秒

// 使用配置文件初始化FileDownloader
FileDownloadConfiguration configuration = builder.build();
FileDownloader.init(configuration);

**注册监听器
不需要的时候取消注册 也可以不注册**

  private OnFileDownloadStatusListener mOnFileDownloadStatusListener = new OnSimpleFileDownloadStatusListener() {
        @Override
        public void onFileDownloadStatusRetrying(DownloadFileInfo downloadFileInfo, int retryTimes) {
            // 正在重试下载(如果你配置了重试次数,当一旦下载失败时会尝试重试下载),retryTimes是当前第几次重试 
        }

        @Override
        public void onFileDownloadStatusWaiting(DownloadFileInfo downloadFileInfo) {
            // 等待下载(等待其它任务执行完成,或者FileDownloader在忙别的操作) 
        }

        @Override
        public void onFileDownloadStatusPreparing(DownloadFileInfo downloadFileInfo) {
            // 准备中(即,正在连接资源) 
        }

        @Override
        public void onFileDownloadStatusPrepared(DownloadFileInfo downloadFileInfo) {
            // 已准备好(即,已经连接到了资源) 
        }

        @Override
        public void onFileDownloadStatusDownloading(DownloadFileInfo downloadFileInfo, float downloadSpeed, long
                remainingTime) {
            // 正在下载,downloadSpeed为当前下载速度,单位KB/s,remainingTime为预估的剩余时间,单位秒 
        }

        @Override
        public void onFileDownloadStatusPaused(DownloadFileInfo downloadFileInfo) {
            // 下载已被暂停 
        }

        @Override
        public void onFileDownloadStatusCompleted(DownloadFileInfo downloadFileInfo) {
            // 下载完成(整个文件已经全部下载完成) 
        }

        @Override
        public void onFileDownloadStatusFailed(String url, DownloadFileInfo downloadFileInfo, FileDownloadStatusFailReason failReason) {
            // 下载失败了,详细查看失败原因failReason,有些失败原因你可能必须关心 
            String failType = failReason.getType();
            String failUrl = failReason.getUrl();// 或:failUrl = url,url和failReason.getType()会是一样的 
            if (FileDownloadStatusFailReason.TYPE_URL_ILLEGAL.equals(failType)) {
                // 下载failUrl时出现url错误 
            } else if (FileDownloadStatusFailReason.TYPE_STORAGE_SPACE_IS_FULL.equals(failType)) {
                // 下载failUrl时出现本地存储空间不足 
            } else if (FileDownloadStatusFailReason.TYPE_NETWORK_DENIED.equals(failType)) {
                // 下载failUrl时出现无法访问网络 
            } else if (FileDownloadStatusFailReason.TYPE_NETWORK_TIMEOUT.equals(failType)) {
                // 下载failUrl时出现连接超时 
            } else {
                // 更多错误.... 
            }

            // 查看详细异常信息 
            Throwable failCause = failReason.getCause();// 或:failReason.getOriginalCause() 
            // 查看异常描述信息 
            String failMsg = failReason.getMessage();// 或:failReason.getOriginalCause().getMessage() 
        }
    };

// 注册监听器
FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener);

注册文件数据变化监听器 如 文件不存在,被删除,状态变化等

 private OnDownloadFileChangeListener mOnDownloadFileChangeListener = new OnDownloadFileChangeListener() {
        @Override
        public void onDownloadFileCreated(DownloadFileInfo downloadFileInfo) {        // 一个新下载文件被创建,也许你需要同步你自己的数据存储,比如在你的业务数据库中增加一条记录     }    @Override    public void onDownloadFileUpdated(DownloadFileInfo downloadFileInfo, Type type) {        // 一个下载文件被更新,也许你需要同步你自己的数据存储,比如在你的业务数据库中更新一条记录     }    @Override    public void onDownloadFileDeleted(DownloadFileInfo downloadFileInfo) {        // 一个下载文件被删除,也许你需要同步你自己的数据存储,比如在你的业务数据库中删除一条记录     }};

// 注册监听器
            FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener);

下载文件

// 如果文件没被下载过 将创建并开启下载
// 否则继续下载 自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
FileDownloader.start(url);

创建一个自定义下载路径和文件名的下载

FileDownloader.detect(url, new OnDetectBigUrlFileListener() {
    @Override
    public void onDetectNewDownloadFile(String url, String fileName, String saveDir, long fileSize) {
        // 如果有必要,可以改变文件名称fileName和下载保存的目录saveDir 
        FileDownloader.createAndStart(url, newFileDir, newFileName);
    }
    @Override
    public void onDetectUrlFileExist(String url) {
        // 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载) 
        FileDownloader.start(url);
    }
    @Override
    public void onDetectUrlFileFailed(String url, DetectBigUrlFileFailReason failReason) {
        // 探测一个网络文件失败了,具体查看failReason 
    }
});

暂停下载

// 暂停单个下载任务
FileDownloader.pause(url);

// 暂停多个下载任务 list集合
FileDownloader.pause(urls);

// 暂停所有下载任务
FileDownloader.pauseAll();

继续下载

// 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
FileDownloader.reStart(url);

// 继续下载 list集合
FileDownloader.reStart(urls);

移动下载文件

// 移动单个下载文件到新文件夹中
FileDownloader.move(url, newDirPath, mOnMoveDownloadFileListener);

// 移动多个下载文件到新文件夹中  list集合
FileDownloader.move(urls, newDirPath, mOnMoveDownloadFilesListener);

删除下载

// 删除单个下载文件
FileDownloader.delete(url, true, mOnDeleteDownloadFileListener);

// 删除多个下载文件 list集合
FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);

重命名下载文件

// 重命名一个下载文件
FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);

取消监听

// 取消注册下载状态监听器(一般在fragment或activity的onDestroy方法中取消注册)
FileDownloader.unregisterDownloadStatusListener(mOnFileDownloadStatusListener);
// 取消注册文件数据变化监听器
FileDownloader.unregisterDownloadFileChangeListener(mOnDownloadFileChangeListener);
 类似资料: