博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
app 下载更新 file-downloader 文件下载库的简单介绍和使用
阅读量:4841 次
发布时间:2019-06-11

本文共 6907 字,大约阅读时间需要 23 分钟。

app 下载更新 file-downloader 文件下载库的简单介绍和使用

 

今天介绍一个下载库:file-downloader 文件下载库

 

说明:

  * 本文内容来自原 file-downloader 文件下载库 的GitHub项目地址;

  * 我在这里做了更详细的整理;

  * 下面会罗列原项目以及原作者的信息。

 

项目地址:

  * GitHub:

介绍:

  * FileDownloader是安卓上轻量级Http/Https文件下载框架,我的目标是让安卓文件下载越简单越好,尽可能以最简洁明了的方式完成复杂需求。

特点:

  * 多任务并行下载
  * 自动断点续传
  * 失败自动重试机制
  * 支持大文件(超过2G)下载
  * 强大方便的异常处理和异常恢复机制
  * 轻松管理下载文件的生命周期(下载文件的增删改查)等

适合的使用场景:

  1. 需要多页面多方位同步下载进度和下载状态

    * 比如商店APP,A页面开启点击下载,B页面和C页面也可以看到下载进度和暂停这下载,而D页面 可以删除这个下载;

    * 无论哪个页面有操作,其它页面都会收到响应的回调进行更新;

    * 并且还可能还需要常驻一个service来把下载情况同步发送到通知栏的;

  2. 需要断点续传节约流量(比如做批量应用更新APP、单个应用自己更新下载新版本、做影视需要批量缓存视频的APP,做MP3歌曲下载APP);
  3. 专门做下载的(比如迅雷之类的APP,需要下载任何服务器上的东西,并且兼顾下载效率和开发效率的)

效果展示(图片来自原项目GitHub):

  * git图1:

   * git图2:

 

详细API文档

  *

版本更新日志

  *

关于作者:

  * 博客园:

 

 

  使用:  

  1. 添加依赖
  2. 初始化
  3. 设置监听器
  4. 文件管理

1. 添加依赖:

  * 在mode的build.gradle中添加依赖: compile 'org.wlf:FileDownloader:0.3.2'

2. 初始化:

  * 在application的onCreate()中初始化FileDownloader;
  * 初始化代码:
  * 封装到一个方法中,在onCreate方法中调用该方法即可;
    initDownload();

//初始化下载库:如果需要更改apk的保存文件夹,修改configFileDownloadDir方法中的参数即可;private void initDownload(){    // 1.创建Builder    Builder builder = new FileDownloadConfiguration.Builder(this);    // 2.配置Builder    // 配置下载文件保存的文件夹: FileDownloader    builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "FileDownloader");    // 配置同时下载任务数量,如果不配置默认为2    builder.configDownloadTaskSize(3);    // 配置失败时尝试重试的次数,如果不配置默认为0不尝试    builder.configRetryDownloadTimes(5);    // 开启调试模式,方便查看日志等调试相关,如果不配置默认不开启    builder.configDebugMode(true);    // 配置连接网络超时时间,如果不配置默认为15秒    builder.configConnectTimeout(25000);// 25秒    // 3.使用配置文件初始化FileDownloader    FileDownloadConfiguration configuration = builder.build();    FileDownloader.init(configuration);}

3. 监听器:
说明:
  * 如果不需要监听,可以忽略;
  * 监听器是基于观察者模式设计的全局监听器,可以设置多个;
  * 记得在不需要的时候取消注册;
  * 步骤:
  1. 注册:
    * 在activity或者fragment的onCreate方法中注册;
    * 如果使用service,请查说明:https://github.com/wlfcolin/file-downloader/blob/master/USEINSERVICE-zh.md
  2. 注销:
    * 在activity或者fragment销毁的时候注销即可;
    * 分类:监听器有两个:
    * 第一个是用来监听下载状态的监听器
    * 第二个是用来监听数据变化的监听器
    * 文件数据变化监听器,监听比如文件不存在了,被删除了,状态变化了等任何与文件数据变化相关都会收到通知;
    * 下载状态监听器和文件数据变化监听器的主要区别在于,前者关心下载进度和错误(前端UI),后者关心文件数据变化(数据存储);

 

3.1 第一个监听器的代码:下载状态的监听器

// 1. 创建 - 监听器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.getUrl()会是一样的        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()    }}; // 2. 注册 - 监听器(在onCreate方法中注册)FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener); // 3. 注销 - 监听器(在onDestroy方法中注销)FileDownloader.unregisterDownloadStatusListener(mOnFileDownloadStatusListener); 注意:将相应的代码放在项目中对应的正确的位置

 

 

3.2 第二个监听器的代码:数据变化监听器

// 1. 创建 - 监听器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) {        // 一个下载文件被删除,也许你需要同步你自己的数据存储,比如在你的业务数据库中删除一条记录    }}; // 2. 注册 - 监听器FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener); // 3. 注销 - 监听器FileDownloader.unregisterDownloadFileChangeListener(mOnDownloadFileChangeListener);
注意:将相应的代码放在项目中对应的正确的位置

 

 

 

4. api的简单使用: 下载文件和管理文件

// 创建一个新下载: 如果文件没下载过,创建并开启下载,否则继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)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);// 暂停单个下载任务FileDownloader.pause(urls);// 暂停多个下载任务FileDownloader.pauseAll();// 暂停所有下载任务// 继续下载:自动会断点续传(如果服务器无法支持断点续传将从头开始下载)FileDownloader.start(url);// 移动单个下载文件到新文件夹中FileDownloader.move(url, newDirPath, mOnMoveDownloadFileListener);// 移动多个下载文件到新文件夹中FileDownloader.move(urls, newDirPath, mOnMoveDownloadFilesListener);// 重命名下载文件FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);// 删除单个下载文件FileDownloader.delete(url, true, mOnDeleteDownloadFileListener);// 删除多个下载文件FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);

 

转载于:https://www.cnblogs.com/geaosu/p/8855918.html

你可能感兴趣的文章
Spring Framework 5.x 学习专栏
查看>>
Linux 磁盘挂载和mount共享
查看>>
云计算开发教程,云计算能干什么?
查看>>
利用”+“、”-“JS字符串类型与数字类型转换
查看>>
【剑指offer面试题4】替换空格%20和清除空格
查看>>
【AtCoder】AGC032
查看>>
R学习-小白笔记07
查看>>
Apache Tez 0.7、0.83、 0.82 安装、调试笔记
查看>>
JAVA基础学习之路(五)数组的定义及使用
查看>>
利用Chrome模拟访问移动端网页
查看>>
20170505
查看>>
团队-科学计算器-团队一阶段互评
查看>>
ios触摸事件处理
查看>>
apache 整合svn
查看>>
Oracle 测试语句
查看>>
linux计划任务
查看>>
Egg 企业级应用开发框架的搭建
查看>>
input与button按钮背景图失效不显示的解决办法
查看>>
[Mac入门]如何在Mac下显示Finder中的所有文件
查看>>
证明二叉查找树所有节点的平均深度为O(logN)
查看>>