2、基于Ok+Rxjava+Retrofit实现断点续传下载
最近总结一下了一下之前学过以及用到过得功能,整理了一个基于Ok+Rxjava实现断点续传下载的demo。下面先给大家展示一下使用效果吧。
说下我的大致思路吧:根据文件下载url按照自己定义的规则生成文件名,判断本地同路径下是否存在此文件,如果存在,文件大小与服务器上获取的文件大小一致的情况下,则生成新的文件名重新下载;如果文件比服务器获取的文件大小小,则执行断点下载,从本地文件长度处开始下载。如果文件不存在,则从0字节开始下载。
DownloadSubscribe(被观察者)中执行下载存入本地操作
核心还是:addHeader("RANGE", "bytes=" + downloadLength + "-" + contentLength)
DownLoadObserver(观察者)通过onnext(DownloadInfo downloadInfo)方法回调下载进度
下面上主要代码:
/**
* 开始下载
* @param url 下载请求的网址
* @param downFileCallback 用来回调的接口
*/
public void download(final String url, final DownFileCallback downFileCallback) {
if (url == null || downCalls.get(url) != null) {
return;
}
Observable.just(url)
.filter(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
//过滤条件 若map中存在,则这次不下载