Android 文件下载file-downloader框架的使用

FileDownloader(https://github.com/wlfcolin/file-downloader)是本人开源的一个安卓Http文件下载框架,是根据自己的经验总结的一套非常轻量级的安卓通用Http文件下载管理器。我的目标是让文件下载越简单越好,尽可能以最简洁明了的方式完成复杂需求。亦可以查看github上的最新中文描述

一、特点

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

二、非常适合的使用场景

  • 1、需要多页面多方位同步下载进度和下载状态(比如商店APP,A页面开启点击下载,B页面和C页面也可以看到下载进度和暂停这个下载,而D页面 可以删除这个下载,无论哪个页面有操作,其它页面都会收到响应的回调进行更新,并且还可能还需要常驻一个service来把下载情况同步发送到通知栏的)

  • 2、需要断点续传节约流量(比如做批量应用更新APP、单个应用自己更新下载新版本、做影视需要批量缓存视频的APP,做MP3歌曲下载APP)

  • 3、专门做下载的(比如迅雷之类的APP,需要下载任何服务器上的东西,并且兼顾下载效率和开发效率的)

三、截图

  • image
  • image

四、快速上手使用

  • 第一步、在项目模块的build.gradle配置gradle

compile 'org.wlf:FileDownloader:0.3.1'

eclipse用户,可以在这里下载jar包: FileDownloader-0.3.1.jarFileDownloader-0.3.1-sources.jar

  • 第二步、在你的应用application的onCreate()中初始化FileDownloader


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 1、创建Builder  
  2. Builder builder = new FileDownloadConfiguration.Builder(this);  
  3.   
  4. // 2.配置Builder  
  5. // 配置下载文件保存的文件夹  
  6. builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +  
  7.         "FileDownloader");  
  8. // 配置同时下载任务数量,如果不配置默认为2  
  9. builder.configDownloadTaskSize(3);  
  10. // 配置失败时尝试重试的次数,如果不配置默认为0不尝试  
  11. builder.configRetryDownloadTimes(5);  
  12. // 开启调试模式,方便查看日志等调试相关,如果不配置默认不开启  
  13. builder.configDebugMode(true);  
  14. // 配置连接网络超时时间,如果不配置默认为15秒  
  15. builder.configConnectTimeout(25000);// 25秒  
  16.   
  17. // 3、使用配置文件初始化FileDownloader  
  18. FileDownloadConfiguration configuration = builder.build();  
  19. FileDownloader.init(configuration);  

  • 第三步、注册监听器(如果不需要监听,可以忽略),监听器是基于观察者模式设计的全局监听器,可以设置多个,记得在不需要的时候取消注册

  • -注册下载状态监听器(一般在fragment或activity的onCreate方法中注册,如果你使用service,请查看在Service中使用FileDownloader)
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. private OnFileDownloadStatusListener mOnFileDownloadStatusListener = new OnSimpleFileDownloadStatusListener() {  
  2.     @Override  
  3.     public void onFileDownloadStatusRetrying(DownloadFileInfo downloadFileInfo, int retryTimes) {  
  4.         // 正在重试下载(如果你配置了重试次数,当一旦下载失败时会尝试重试下载),retryTimes是当前第几次重试  
  5.     }  
  6.     @Override  
  7.     public void onFileDownloadStatusWaiting(DownloadFileInfo downloadFileInfo) {  
  8.         // 等待下载(等待其它任务执行完成,或者FileDownloader在忙别的操作)  
  9.     }  
  10.     @Override  
  11.     public void onFileDownloadStatusPreparing(DownloadFileInfo downloadFileInfo) {  
  12.         // 准备中(即,正在连接资源)  
  13.     }  
  14.     @Override  
  15.     public void onFileDownloadStatusPrepared(DownloadFileInfo downloadFileInfo) {  
  16.         // 已准备好(即,已经连接到了资源)  
  17.     }  
  18.     @Override  
  19.     public void onFileDownloadStatusDownloading(DownloadFileInfo downloadFileInfo, float downloadSpeed, long  
  20.             remainingTime) {  
  21.         // 正在下载,downloadSpeed为当前下载速度,单位KB/s,remainingTime为预估的剩余时间,单位秒  
  22.     }  
  23.     @Override  
  24.     public void onFileDownloadStatusPaused(DownloadFileInfo downloadFileInfo) {  
  25.         // 下载已被暂停  
  26.     }  
  27.     @Override  
  28.     public void onFileDownloadStatusCompleted(DownloadFileInfo downloadFileInfo) {  
  29.         // 下载完成(整个文件已经全部下载完成)  
  30.     }  
  31.     @Override  
  32.     public void onFileDownloadStatusFailed(String url, DownloadFileInfo downloadFileInfo, FileDownloadStatusFailReason failReason) {  
  33.         // 下载失败了,详细查看失败原因failReason,有些失败原因你可能必须关心  
  34.   
  35.         String failType = failReason.getType();  
  36.         String failUrl = failReason.getUrl();// 或:failUrl = url,url和failReason.getType()会是一样的  
  37.   
  38.         if(FileDownloadStatusFailReason.TYPE_URL_ILLEGAL.equals(failType)){  
  39.             // 下载failUrl时出现url错误  
  40.         }else if(FileDownloadStatusFailReason.TYPE_STORAGE_SPACE_IS_FULL.equals(failType)){  
  41.             // 下载failUrl时出现本地存储空间不足  
  42.         }else if(FileDownloadStatusFailReason.TYPE_NETWORK_DENIED.equals(failType)){  
  43.             // 下载failUrl时出现无法访问网络  
  44.         }else if(FileDownloadStatusFailReason.TYPE_NETWORK_TIMEOUT.equals(failType)){  
  45.             // 下载failUrl时出现连接超时  
  46.         }else{  
  47.             // 更多错误....  
  48.         }  
  49.   
  50.         // 查看详细异常信息  
  51.         Throwable failCause = failReason.getCause();// 或:failReason.getOriginalCause()  
  52.   
  53.         // 查看异常描述信息  
  54.         String failMsg = failReason.getMessage();// 或:failReason.getOriginalCause().getMessage()  
  55.     }  
  56. };  
  57. FileDownloader.registerDownloadStatusListener(mOnFileDownloadStatusListener);  

  • -注册文件数据变化监听器,监听比如文件不存在了,被删除了,状态变化了等任何与文件数据变化相关都会收到通知
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. private OnDownloadFileChangeListener mOnDownloadFileChangeListener = new OnDownloadFileChangeListener() {  
  2.     @Override  
  3.     public void onDownloadFileCreated(DownloadFileInfo downloadFileInfo) {  
  4.         // 一个新下载文件被创建,也许你需要同步你自己的数据存储,比如在你的业务数据库中增加一条记录  
  5.     }  
  6.     @Override  
  7.     public void onDownloadFileUpdated(DownloadFileInfo downloadFileInfo, Type type) {  
  8.         // 一个下载文件被更新,也许你需要同步你自己的数据存储,比如在你的业务数据库中更新一条记录  
  9.     }  
  10.     @Override  
  11.     public void onDownloadFileDeleted(DownloadFileInfo downloadFileInfo) {  
  12.         // 一个下载文件被删除,也许你需要同步你自己的数据存储,比如在你的业务数据库中删除一条记录  
  13.     }  
  14. };  
  15. FileDownloader.registerDownloadFileChangeListener(mOnDownloadFileChangeListener);  


下载状态监听器和文件数据变化监听器的主要区别在于,前者关心下载进度和错误(前端UI),后者关心文件数据变化(数据存储)

  • 第四步、下载文件和管理文件

  • -创建一个新下载
FileDownloader.start(url);// 如果文件没被下载过,将创建并开启下载,否则继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
  • -创建一个自定义保存路径和文件名称的下载
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. FileDownloader.detect(url, new OnDetectBigUrlFileListener() {  
  2.     @Override  
  3.     public void onDetectNewDownloadFile(String url, String fileName, String saveDir, long fileSize) {  
  4.         // 如果有必要,可以改变文件名称fileName和下载保存的目录saveDir  
  5.         FileDownloader.createAndStart(url, newFileDir, newFileName);  
  6.     }  
  7.     @Override  
  8.     public void onDetectUrlFileExist(String url) {  
  9.         // 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)  
  10.         FileDownloader.start(url);  
  11.     }  
  12.     @Override  
  13.     public void onDetectUrlFileFailed(String url, DetectBigUrlFileFailReason failReason) {  
  14.         // 探测一个网络文件失败了,具体查看failReason  
  15.     }  
  16. });  


  • -暂停下载
FileDownloader.pause(url);// 暂停单个下载任务
FileDownloader.pause(urls);// 暂停多个下载任务
FileDownloader.pauseAll();// 暂停所有下载任务
  • -继续下载
FileDownloader.start(url);// 继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
  • -移动下载文件
FileDownloader.move(url, newDirPath, mOnMoveDownloadFileListener);// 移动单个下载文件到新文件夹中
FileDownloader.move(urls, newDirPath, mOnMoveDownloadFilesListener);// 移动多个下载文件到新文件夹中
  • -删除下载文件
FileDownloader.delete(url, true, mOnDeleteDownloadFileListener);// 删除单个下载文件
FileDownloader.delete(urls, true, mOnDeleteDownloadFilesListener);// 删除多个下载文件
  • -重命名下载文件
FileDownloader.rename(url, newName, true, mOnRenameDownloadFileListener);// 重命名一个下载文件
  • 第五步、取消注册的监听器

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

五、详细API文档

六、版本更新日志

转自:http://www.cnblogs.com/wlfcolin/p/5001363.html
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值