# JansenDownloader **Repository Path**: jansen/jansen-downloader ## Basic Information - **Project Name**: JansenDownloader - **Description**: 🔥下载可以很简单。单任务下载、多任务下载、暂停全部任务、自动恢复下载、断点续传、任何一个界面监听进度等 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2021-08-25 - **Last Updated**: 2024-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: Android ## README ### JansenDownload > 如果你觉得这个lib对你有用,随手给个Star,让我知道它是对你有帮助的,我会继续更新和维护它。 ![image](./download_simple.gif) ### 功能 - 任何一个界面检测进度 - 单个任务下载 - 多个任务下载 - 取消单个任务 - 取消全部任务 - 暂停所有任务 - 支持队列 - 队列最大同时下载任务数,超过则进入等待队列 - 自动恢复上一次下载任务 ### 使用方法 #### downloader 权限相关 ``` ``` #### 添加依赖 根项目的build.gradle: ``` allprojects { repositories { google() jcenter() } } ``` ``` implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.fasterxml.jackson.core:jackson-core:2.10.1' implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.1' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.10.1' ``` #### 配置 1. 在您的Application处调用初始化代码: DownloadConfig downloadConfig = new DownloadConfig(this); // 自定义配置 均有默认值 // downloadConfig.setMaxDownloadTasks(); 队列最大同时下载任务数,超过则进入等待队列 默认:3 // downloadConfig.setMaxDownloadThreads() 最大线程下载数 默认:3 // downloadConfig.setDownloadDir() 下载文件路径 ...省略若干 JansenDownloader.initializeDownloader(downloadConfig); #### DownloadEntry.Status的几种状态 |状态|说明| |:---|:---| |`IDLE`|空闲| |`WAITING`|等待| |`CONNECTING`|连接| |`CONNECT_SUCCESSFUL`|连接成功| |`DOWNLOADING`|开始下载| |`PAUSED`|暂停| |`CANCELLED`|取消| |`COMPLETED`|完成| |`ERROR`|发生错误| #### 使用方法 ``` private final DownloadEntry downloadEntry = new DownloadEntry("url","name"); QuietDownloader.download(downloadEntry) ... 省略代码 ``` |常用静态方法|参数|说明| |:---|:---|:---| |`download`|downloadEntry|下载一个任务| |`pause`|downloadEntry|在听一个任务| |`cancel`|downloadEntry|取消一个任务| |`resume`|downloadEntry|恢复一个下载任务| |`recoverAll`|无|恢复所有下载任务| |`pauseAll`|无|暂停所有任务| |`queryAll`|无|查询所有下载任务返回一个list| |`queryById`|id|查询一个`downloadEntry`从数据库中 |`deleteById`|id|从数据库中删除一个downloadEntry| |`getDBDao`|无|返回`Dao`自定义进行数据查询| ...... #### 监听 `JansenDownloader` 并没有采用传统listener方式,而是使用了观察者模式,如需要在某个界面监听下载进度 ``` private final DataUpdatedWatcher mDataUpdateReceiver = new DataUpdatedWatcher() { @Override public void notifyUpdate(DownloadEntry entry) { // calback mainUIThread // do something // 可根据 entry status来判断一些列状态 if(entry.status == DownloadEntry.pause || DownloadEntry.downloading ...) } }; // 省略若干代码 //监听下载状态 @Override protected void onResume() { super.onResume(); QuietDownloader.addObserver(mDataUpdateReceiver); } @Override protected void onPause() { super.onPause(); QuietDownloader.removeObserver(mDataUpdateReceiver); } ``` #### 关于DownloadEntry ``` public class DownloadEntry implements Serializable { public String id; public String name; public String url; public int currentLength; public int totalLength; // ... 省略代码 /** * @param url 下载地址 * @param name 文件名称(带后缀) */ public DownloadEntry(String url, String name) { this.url = url; this.id = url; this.name = name; this.filePath = QuietDownloader.getImpl().getConfigs().getDownloadFile(name).getAbsolutePath(); } // ... 省略代码 @Override public boolean equals(Object o) { return o.hashCode() == this.hashCode(); } @Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + id.hashCode(); return result; } } ``` #### 注意 - `DownloadEntry` 实体类重写其 equals 以及 hashCode 方法,使用其 id hashCode 来作为其标准 - `QuietDownloader` 内部使用DownloadEntry实体类进行关联 - `QuietDownEntry`的`name`属性最终作为下载文件名称 - 如果自定义了`downloadConfig.setDownloadDir()`下载位置注意申请读写权限 --- ## 感谢以下项目作者 - [QuiteDownload](https://github.com/xwdz/QuietDownload/)