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,需要下载任何服务器上的东西,并且兼顾下载效率和开发效率的)
三、截图
四、快速上手使用
-
第一步、在项目模块的build.gradle配置gradle
compile 'org.wlf:FileDownloader:0.3.1'
eclipse用户,可以在这里下载jar包: FileDownloader-0.3.1.jar, FileDownloader-0.3.1-sources.jar
-
第二步、在你的应用application的onCreate()中初始化FileDownloader
-
- Builder builder = new FileDownloadConfiguration.Builder(this);
-
-
-
- builder.configFileDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator +
- "FileDownloader");
-
- builder.configDownloadTaskSize(3);
-
- builder.configRetryDownloadTimes(5);
-
- builder.configDebugMode(true);
-
- builder.configConnectTimeout(25000);
-
-
- FileDownloadConfiguration configuration = builder.build();
- FileDownloader.init(configuration);
-
第三步、注册监听器(如果不需要监听,可以忽略),监听器是基于观察者模式设计的全局监听器,可以设置多个,记得在不需要的时候取消注册
- -注册下载状态监听器(一般在fragment或activity的onCreate方法中注册,如果你使用service,请查看在Service中使用FileDownloader)
- private OnFileDownloadStatusListener mOnFileDownloadStatusListener = new OnSimpleFileDownloadStatusListener() {
- @Override
- public void onFileDownloadStatusRetrying(DownloadFileInfo downloadFileInfo, int retryTimes) {
-
- }
- @Override
- public void onFileDownloadStatusWaiting(DownloadFileInfo downloadFileInfo) {
-
- }
- @Override
- public void onFileDownloadStatusPreparing(DownloadFileInfo downloadFileInfo) {
-
- }
- @Override
- public void onFileDownloadStatusPrepared(DownloadFileInfo downloadFileInfo) {
-
- }
- @Override
- public void onFileDownloadStatusDownloading(DownloadFileInfo downloadFileInfo, float downloadSpeed, long
- remainingTime) {
-
- }
- @Override
- public void onFileDownloadStatusPaused(DownloadFileInfo downloadFileInfo) {
-
- }
- @Override
- public void onFileDownloadStatusCompleted(DownloadFileInfo downloadFileInfo) {
-
- }
- @Override
- public void onFileDownloadStatusFailed(String url, DownloadFileInfo downloadFileInfo, FileDownloadStatusFailReason failReason) {
-
-
- String failType = failReason.getType();
- String failUrl = failReason.getUrl();
-
- if(FileDownloadStatusFailReason.TYPE_URL_ILLEGAL.equals(failType)){
-
- }else if(FileDownloadStatusFailReason.TYPE_STORAGE_SPACE_IS_FULL.equals(failType)){
-
- }else if(FileDownloadStatusFailReason.TYPE_NETWORK_DENIED.equals(failType)){
-
- }else if(FileDownloadStatusFailReason.TYPE_NETWORK_TIMEOUT.equals(failType)){
-
- }else{
-
- }
-
-
- Throwable failCause = failReason.getCause();
-
-
- String failMsg = failReason.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);
下载状态监听器和文件数据变化监听器的主要区别在于,前者关心下载进度和错误(前端UI),后者关心文件数据变化(数据存储)
FileDownloader.start(url);// 如果文件没被下载过,将创建并开启下载,否则继续下载,自动会断点续传(如果服务器无法支持断点续传将从头开始下载)
- FileDownloader.detect(url, new OnDetectBigUrlFileListener() {
- @Override
- public void onDetectNewDownloadFile(String url, String fileName, String saveDir, long fileSize) {
-
- FileDownloader.createAndStart(url, newFileDir, newFileName);
- }
- @Override
- public void onDetectUrlFileExist(String url) {
-
- FileDownloader.start(url);
- }
- @Override
- public void onDetectUrlFileFailed(String url, DetectBigUrlFileFailReason failReason) {
-
- }
- });
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);
转自:http://www.cnblogs.com/wlfcolin/p/5001363.html