java带进度条的远程下载_Retrofit+RxJava实现带进度条的文件下载

本文介绍了如何使用Retrofit和RxJava在Android中实现远程文件下载并显示进度条。通过自定义ProgressResponseBody和ProgressInterceptor,监听下载进度,并在主线程中更新。同时,文章涉及了文件保存、权限适配以及7.0以上版本的安装APK的处理。
摘要由CSDN通过智能技术生成

项目中需要使用到更新版本,因此研究了一下Retrofit的下载文件,和进度条效果,其间也遇到了一些坑,写出来加深一下记忆,也为别的同学提供一下思路。

先说一下版本控制吧,通用做法基本上是通过接口获取服务器存储的app版本号,与应用的版本号进行比较,版本较低就去更新,先看一下如何获取应用版本号吧

PackageManager packageManager = mActivity.getPackageManager();

PackageInfo packageInfo = null;

try {

packageInfo = packageManager.getPackageInfo(mActivity.getPackageName(), 0);

} catch (PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

String versionName = packageInfo.versionName;

可以看到使用的是Context中的getPackageManager方法来获取PackageManager 对象,该对象可用于获取版本的一些信息。

上面的属于附内容,接下来就是关于Retrofit+RxJava实现进度条下载文件的功能,Retrofit本身不提供进度条显示的功能,但Retrofit默认使用Okhttp来进行网络请求,这里就可以自定义拦截器来进行拦截,实现进度。Okhttp的Demo中也为我们提供了一份代码,需要的可以去参考一下Progress.javar,可以看到拦截器的设置:

public class ProgressResponseBody extends ResponseBody {

private ResponseBody responseBody;

private ProgressListener progressListener;

private BufferedSource bufferedSource;

public ProgressResponseBody(ResponseBody responseBody,ProgressListener progressListener){

this.responseBody=responseBody;

this.progressListener=progressListener;

}

@Override

public MediaType contentType() {

return responseBody.contentType();

}

@Override

public long contentLength() {

return responseBody.contentLength();

}

@Override

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值