迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:RxDownload开源软件地址:https://gitee.com/season92/RxDownload开源软件介绍:该项目以后不再码云更新, 请移步至Github查看:https://github.com/ssseasonnn/RxDownloadRxDownloadThe download tool based on RxJava . Support multi-threaded download and breakpoint download, intelligent judge whether to support multi-threaded download and breakpoint download. 基于RxJava打造的下载工具, 支持多线程下载和断点续传, 智能判断是否支持断点续传等功能 标签(空格分隔): Android RxJava Download Tools Multi-threaded 基于RxJava打造的下载工具, 支持多线程和断点续传,同时具备后台下载的能力Download tool based on RxJava. Support multi-thread and breakpoint download. Also have background download ability.主要功能:
2016-11-7更新:
2016-11-9 更新
###2016-11-17 更新
2016-11-24 更新
2016-11-25 更新
效果图![]() ![]() ![]() 下载流程图![]() 使用方式一、准备工作1.添加Gradle依赖 dependencies{ compile 'zlc.season:rxdownload:1.2.2' } 2.配置权限 <!-- 在XML中设置权限 --> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
二、常规下载
1.使用方式 Subscription subscription = RxDownload.getInstance() .download(url, "weixin.apk", null) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<DownloadStatus>() { @Override public void onCompleted() { //下载完成 } @Override public void onError(Throwable e) { //下载出错 } @Override public void onNext(final DownloadStatus status) { //下载状态 } });
2.参数配置 可以配置的参数如下: Subscription subscription = RxDownload.getInstance() .maxThread(10) //设置最大线程 .maxRetryCount(10) //设置下载失败重试次数 .retrofit(myRetrofit) //若需要自己的retrofit客户端,可在这里指定 .defaultSavePath(defaultSavePath) //设置默认的下载路径 .context(this) //自动安装需要Context .autoInstall(true); //下载完成自动安装 .download(url,savename,savepath) //开始下载 .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<DownloadStatus>() {); **Tips: **
RxDownload rxDownload1 = RxDownload.getInstance() .maxThread(5) .maxRetryCount(10) .defaultSavePath(defaultPath);//download task 1: Subscription subscription1 = rxDownload1.download(url1,name1,null)...//download task 2: Subscription subscription2 = rxDownload1.download(url2,name2,null)... RxDownload rxDownload2 = RxDownload.getInstance() .maxThread(10)...//download task 3: Subscription subscription3 = rxDownload2.download(url3,name3,null)... 3.取消或暂停下载 取消订阅, 即可暂停下载 Subscription subscription = RxDownload.getInstance() .download(url, null, null) //...//取消订阅, 即可暂停下载, 若服务端不支持断点续传,下一次下载会重新下载,反之会继续下载if (subscription != null && !subscription.isUnsubscribed()) { subscription.unsubscribe();} 4.提供了一个transferform方式供RxJava的Compose操作符使用 例如与RxPermission结合使用
subscription = RxPermissions.getInstance(mContext) .request(Manifest.permission.WRITE_EXTERNAL_STORAGE) //申请存储卡权限 .doOnNext(new Action1<Boolean>() { @Override public void call(Boolean granted) { if (!granted) { //权限被拒绝 throw new RuntimeException("no permission"); } } }) .observeOn(Schedulers.io()) .compose(RxDownload.getInstance().transform(data.url, data.name, null)) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<DownloadStatus>() { ... }); 三、Service下载
1.开始下载, 添加到下载队列中. RxDownload.getInstance() .context(this) .autoInstall(true); //下载完成自动安装 .maxDownloadNumber(3) //设置同时最大下载数量 .serviceDownload(url, saveName, defaultPath) .subscribe(new Action1<Object>() { @Override public void call(Object o) { Toast.makeText(ServiceDownloadActivity.this, "开始下载", Toast.LENGTH_SHORT).show(); } }); serviceDownload()不再使用广播的方式,也不再接收下载进度, 因此无需异步操作, 也无需取消订阅. 2.接收下载事件和下载状态. Subscription temp = mRxDownload.receiveDownloadStatus(url) .subscribe(new Subscriber<DownloadEvent>() { @Override public void onCompleted() { mDownloadController.setState(new DownloadController.Completed()); } @Override public void onError(Throwable e) { Log.w("TAG", e); mDownloadController.setState(new DownloadController.Failed()); } @Override public void onNext(final DownloadEvent event) { mDownloadController.setEvent(event); updateProgress(event); } });// 取消订阅即可取消接收 TIPS:
3.下载事件DownloadEvent说明 public class DownloadEvent { private int flag = DownloadFlag.NORMAL; //当前下载的状态 private DownloadStatus downloadStatus = new DownloadStatus(); //下载进度 public int getFlag() { return flag; } public DownloadStatus getDownloadStatus() { return downloadStatus; }} DownloadEvent中添加了一个flag标记, 用于标记当前下载任务处于什么状态, 有以下状态: public class DownloadFlag { public static final int NORMAL = 9990; //未下载 public static final int WAITING = 9991; //等待中 public static final int STARTED = 9992; //已开始下载 public static final int PAUSED = 9993; //已暂停 public static final int CANCELED = 9994; //已取消 public static final int COMPLETED = 9995; //已完成 public static final int FAILED = 9996; //下载失败 public static final int INSTALL = 9997; //安装中,暂未使用 public static final int INSTALLED = 9998; //已安装,暂未使用 public static final int DELETED = 9999; //已删除} 当在onNext(DownloadEvent event)中接收到event时,可根据flag的状态来判断当前下载任务处于何种状态, 从而进行不同的操作. 4.暂停下载, 暂停下载地址为url的下载任务 mRxDownload.pauseServiceDownload(url).subscribe(); 5.取消下载,取消下载地址为url的下载任务 mRxDownload.cancelServiceDownload(url).subscribe(); 6.删除下载, 取消该下载任务并从数据库中删除该任务 mRxDownload.deleteServiceDownload(url).subscribe(); 7.获取所有的下载记录, 获取数据库中所有的下载记录 mRxDownload.getTotalDownloadRecords() .subscribe(new Action1<List<DownloadRecord>>() { @Override public void call(List<DownloadRecord> list) { mAdapter.addAll(list); } }); 8.获取下载的文件 File file = mRxDownload.getRealFiles(saveName, defaultPath)[0]; 9.更多功能后续将会逐步完善 若您对此项目有疑问,欢迎来提issues. 关于我若您想对该项目来进行交流,可以通过以下方式: QQ : 270362455 Gmail: [email protected] License
![]() |
请发表评论