熟悉漫威电影的人都知道Jarvis,他是钢铁侠的智能管家,帮助钢铁侠制造装甲、分析大量数据、协助建模等各类智能工做,惋惜在复联2中,Jarvis与灵魂宝石共同结合成Vision,钢铁侠失去了这位如亲人通常的智能AI,后来Tony用F.R.I.D.A.Y代替了Jarvis的工做,但从钢铁侠与Friday的互动来看,他只把Friday当作通常的AI,并无投入如对待Jarvis的感情。java
最近复联3上映,中国没有同步上映,真的太惋惜了,五一原本还想过去香港看,但想到到时会人生人海仍是算了,因此假期闲余时间就撸了个JarvisDownloader,之因此以Jarvis命名,也是由于我太喜欢Jarvis这个AI了,它属于人工智能的顶端啊!JarvisDownloader虽然没有Jarvis那么强大,但在下载文件方面,具有了不少的优势。git
gradlegithub
repositories {
maven{
url "https://jitpack.io"
}
}
dependencies {
api 'com.github.yuwenque:JarvisDownloader:0.4.0'
}
复制代码
Jarvis.init(new DefaultDownloadHistoryDBHelper(applicationContext));
复制代码
你也能够自定义一个继承于AbsDownloadHistoryDBHelper的管理类,用于保存下载进度等操做,详细操做请参考DefaultDownloadHistoryDBHelper数据库
请在activity或service中调用api
//构成下载器
Jarvis.Downloader downloader = Jarvis.with(this).withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg");
//是否容许ui不可见时继续下载
downloader.allowBackgroundDownload(true);
//多线程下载数量
downloader.threadCount(3);
//设置下载目录,非必须,默认目录为 Environment.getExternalStorageDirectory()+File.separator+"Jarvis"
downloader.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis");
//设置文件名,非必须,但建议手动设置,默认为服务器文件的名字
downloader.fileName("test.jpg");
//刷新进度的频率(毫秒),最小值为100
downloader.refreshTime(1000);
//设置状态监听
//假如当前context为activity的话Jarvis已经自动帮你回调到主线程了,不须要调用activity.runOnUiThread
downloader.setDownloadListener(new DownloadListener() {
/** * 文件下载完毕回调 * @param file */
@Override
public void onSuccess(File file) {
}
/** * 进度回调 * @param downloadedSize 当前下载的文件大小 * @param progress 当前进度 0-1.0 */
@Override
public void onProgress(long downloadedSize, float progress) {
}
/** * 开始下载时 */
@Override
public void onStart() {
}
/** * 下载暂停时 */
@Override
public void onPause() {
}
/** * 下载失败时 */
@Override
public void onFail() {
}
/** * 被删除时 * @param b 删除成功标志位 */
@Override
public void onDelete(boolean b) {
}
});
//增长额外的请求头
downloader.addExtraRequestProperty("test-key","test-value");
//多个请求头时,可添加map
Map<String,String> map = new HashMap<>();
map.put("test1","value1");
map.put("test2","value2");
downloader.addExtraRequestPropertyMap(map);
//开始下载
downloader.download();
//手动暂停
downloader.pause();
//恢复下载
downloader.recovery();
//手动删除本地记录,但不删除文件,文件下载过程当中不容许删除
downloader.delete();
//删除下载记录以及文件,文件下载过程当中不容许删除
downloader.deleteCacheFile();
//获取当前的下载状态
downloader.getDownloadState();
//同步获取上次下载的进度,因为是查询数据库的操做,因此建议新开线程来获取
downloader.getDownloadedProgress();
//异步获取下载进度
downloader.getDownloadedProgress(new DataCallBack<Float>() {
@Override
public void onData(Float progress) {
}
});
复制代码
上述代码也能够简化成如下形式bash
Jarvis.with(this)
.withUrl("http://pic1.win4000.com/wallpaper/2017-10-11/59dde2bca944f.jpg")
.allowBackgroundDownload(true)
.threadCount(3)
.filePath(Environment.getExternalStorageDirectory() + File.separator + "Jarvis")
.fileName("test.jpg")
.refreshTime(1000)
.setDownloadListener(listener).download();
复制代码
//异步获取下载历史记录,下载进度请本身计算
Jarvis.getInstance().getDownloadedList(new DataCallBack<List<LocalFileRecordBean>>() {
@Override
public void onData(List<LocalFileRecordBean> localFileRecordBeans) {
LocalFileRecordBean fileRecordBean= localFileRecordBeans.get(0);
//下载进度
float progress = fileRecordBean.getDownloadedLength()*1.0f/fileRecordBean.getFileTotalLength();
}
});
//中止全部下载任务
Jarvis.getInstance().pauseAllDownloader();
//开始全部下载任务
Jarvis.getInstance().startAllDownload();
//删除全部下载任务及文件
Jarvis.getInstance().forceDeleteAll();
//设置下载的线程池长度,若是当前有10个下载任务,
//每一个任务开启3个线程进行断点续传下载,那么此时只设置20个的话,将有部分下载任务需等待其余线程执行完任务才能开始
Jarvis.getInstance().initThreadPoolLength(20);
复制代码
源码阅读请跳转到https://github.com/yuwenque/JarvisDownloader服务器