当我开发一个app的时候,需要加入一个版本更新功能然后根据接口返回的版本信息对比进行判断是否需要更新app。该工具用于需要dialog下载apk或者dialog形式强制更新的应用更好。
先上图,便于理解我究竟写了什么,或是否你们需要的
图一:点击就可以自动下载apk
图二:是手动下载的方式,点击开始下载就可以下载apk,这是可以配置或设置的
图三:这里是apk突然下载失败或超时的时候显示的界面,样式是可以设置的
图4:就是显示一些其他样式的情况
简单的说一下,就是一个下载apk的dialog应用,你可以直接从github的项目中拿去直接使用,只需要根据你的需求更改样式即可。
1,下载中你可以设置为必须下载完成界面才可以返回或关闭弹框,或者下载超时的时候你可以返回,关闭弹框或点击重新下载按钮可以再次下载。
2,样式可以根据你的需要做一些调整,自己可以设置颜色和下载样式。
3,弹框可以设置手动下载或自动下载两种方案。
4,下载成功后自动提示安装。
5,适用于有强制更新的app,如果不下载完成安装,是无法进入应用主界面的。
简单解析一段代码:
/**
* 设置进度
*
* @param totalProgress 总进度
* @param progress 当前进度
*/
public void setUpDateProgress(int totalProgress, int progress) {
if (dialog != null) {
//这里是给予progress total只赋值一次
if (isDownload) {
setProgressTotal(totalProgress);
isDownload = false;
}
try {
BigDecimal result = null;
if (totalProgress > progress) {
result = new BigDecimal(String.valueOf(progress)).divide(new BigDecimal(String.valueOf(totalProgress)),
2, BigDecimal.ROUND_HALF_UP);
} else {
result = new BigDecimal(String.valueOf(totalProgress)).divide(new BigDecimal(String.valueOf(progress)),
2, BigDecimal.ROUND_HALF_UP);
}
if (result == null) {
return;
}
String s = new DecimalFormat("###,###.###").format(Double.valueOf(result.toString())).toString();
float currentPro = Float.parseFloat(s);
Message message = Message.obtain();
message.obj = (int)(currentPro * 100);
handler.sendMessage(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 设置总大小
*
* @param progressTotal 总大小
*/
public void setProgressTotal(int progressTotal) {
//关闭重复点击下载按钮
isDownloading = true;
if (progressRing != null) {
progressRing.setMax(100);
}
}
setProgressTotal(totalProgress)该方法只走一次,而且总是100,固定设置就是100.
于是就只需要把currentProgress的计算到100以内就可以,为什么要这样做,原因是下载的时候可能给你的byte或kb,一般应用就十几M或几十M所以数字很大,需要BigDecimal专门处理大数字的方法来处理后设置 currentProgress