记录一次最近用Retrofit+RxJava实现的版本更新
点击更新,状态栏带有下载进度
效果图
一、先看一下实现之后的具体使用方式:
1.检测是否有更新:
/**
* 版本更新检测
*/
private void checkAppUpdate() {
UpdateCheckUtil.getInstance().checkUpdate(new UpdateCheckUtil.AppUpdateCallback() {
@Override
public void result(boolean update, AppUpdateResponseBean bean) {
if (null != tvCurrentVersion) {
tvCurrentVersion.setText(update ? "有新版本,点击更新" : String.format(getString(R.string.str_current_version), AppUtils.getAppVersionName()));
}
hasUpdate = update;
if (update) {
mUpdateBean = bean;
}
}
});
}
2.有新版本,点击更新:
case R.id.check_update_ll:
if (hasUpdate) {
if (UpdateManager.isUpdateIng) {
ToastUtils.showShort("正在下载中");
return;
} else {
if (AppInstallUtil.isInstallApkIsExists(this)) {
AppInstallUtil.installApk(this);
return;
}
}
if (!TextUtils.isEmpty(mUpdateBean.DownloadUrl)) {
UpdateService.startUpdateService(MineActivity.this, mUpdateBean.DownloadUrl, AppInstallUtil.getInstallPath(MineActivity.this));
ToastUtils.showShort("开始下载");
return;
}
}
ToastUtils.showShort(getString(R.string.str_current_is_new_version));
break;
二、上面的代码中涉及到的类如下:
1.UpdateCheckUtil:
/**
* Des: 版本更新检测
* Created by kele on 2020/8/5.
* E-mail:984127585@qq.com
*/
public class UpdateCheckUtil {
private final Service mService;
private UpdateCheckUtil() {
mService = RetrofitManager.getInstance().createService(Service.class);
}
private static class UpdateUtilHolder {
private static final UpdateCheckUtil INSTANCE = new UpdateCheckUtil();
}
public static UpdateCheckUtil getInstance() {
return UpdateUtilHolder.INSTANCE;
}
/**
* 检测新版本
*
* @param cb
*/
public void checkUpdate(final AppUpdateCallback cb) {
if (null == cb) {
return;
}
final AppUpdateRequestBean b = RequestBeanFactory.getInstance().getAppUpdateRB();
Observable> update = mService.update(b);
update
.compose(ResponseTransformer.handleResult())
.compose(SchedulerProvider.getInstance().applySchedulers())
.subscribe(new Consumer() {
@Override
public void accept(AppUpdateResponseBean bean) throws Exception {
if (null == cb) {
return;
}
if (null != bean) {
int vCode = AppUtils.getAppVersionCode();
boolean update = bean.VersionCode > vCode;
cb.result(update, bean);
return;
}
cb.result(false, null);
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
if (null == cb) {
return;
}
cb.result(false, null);
}
});
}
/**
* 版本更新回调
*/
public interface AppUpdateCallback {
/**
* 检测结果
*
* @param update 是否有新版本
* @param bean 新版本实体
*/
void result(boolean update, AppUpdateResponseBean bean);
}
/**
* 版本更新检测接口
*/
priv