# 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,让我知道它是对你有帮助的,我会继续更新和维护它。

### 功能
- 任何一个界面检测进度
- 单个任务下载
- 多个任务下载
- 取消单个任务
- 取消全部任务
- 暂停所有任务
- 支持队列
- 队列最大同时下载任务数,超过则进入等待队列
- 自动恢复上一次下载任务
### 使用方法
#### 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/)