版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30299243/article/details/81137755
在网上找了很多的代码,bug一堆堆,很多代码都是不一定符合自己的实际需求,都需要改进。下面的代码就是那别人的代码改进的,把项目集成到自己的项目里时,会报错,直接把build里报错的代码注释即可。
原理其实很简单。
1,向后台发请求,获取版本号。
2,判断当前的版本号是否和后台给的版本号相同,如果不相同,去下载更新
3,更新,安装apk
//版本号和版本的名字 String versionCode, versionName; //获取版本号 versionCode = APKVersionCodeUtils.getVersionCode(this) + ""; versionName = APKVersionCodeUtils.getVerName(this);
defaultConfig { ... versionCode 2 versionName "1.1"//版本号
1,判断版本是否是最新的版本(普通的联网请求,略过)
直接代码:请求后台后,调用方法:panduan(s,c)//版本号和更新的内容:
后台一个参数搞定:"versionDescription":"1.修复若干bug\n2.美化部分页面\n3.增加微信支付方式"这样,前端直接安条显示的就是123
//根据版本号判断去更新
private void panduan(String s, String c) {
if (s.equals(versionName)) {
ifupdate = true;
} else {
showpopwindows(c);
}
}
//弹出提示的pop
private void showpopwindows(String s) {
ifupdate = false;//判断是否是更新,如果有弹窗表示未更新,如果客户按返回键,下次点击别的地方,判断这个值,如果是false就让客户更新。我的是强制更新,读者可根据实际情况而定,是否需要强制更新。
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.banben_dialogss, null);//这个布局很简单,自己根据情况定义。
final Dialog dialogs = new AlertDialog.Builder(HomeActivity.this)
.setView(view).show();
//设置弹窗的位置
Window window = dialogs.getWindow();
WindowManager m = getWindowManager();
Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
WindowManager.LayoutParams p = window.getAttributes(); // 获取对话框当前的参数值
p.height = (int) (d.getHeight() * 0.6); // 改变的是dialog框在屏幕中的位置而不是大小
p.width = (int) (d.getWidth() * 0.8); // 宽度设置为屏幕的0.65
window.setAttributes(p);
//更新的内容
TextView tv_details = view.findViewById(R.id.tv_details);
tv_details.setText(s);
//点击事件去跟新
Button shengji = view.findViewById(R.id.shengji);
shengji.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogs.dismiss();
gengxin();//下载跟新
//打开游览器更新,直接打开手机自带的浏览器,调到浏览器去下载更新
// Intent intent = new Intent();
// intent.setAction("android.intent.action.VIEW");
// Uri content_url = Uri.parse("https://fir.im/2dh5");
// intent.setData(content_url);
// startActivity(intent);
}
});
}
//出现更新的对话框
private static final String apkPath1 = "http://issuecdn.baidupcs.com/issue/netdisk/apk/BaiduNetdisk_7.15.1.apk";//此处是你apk的下载地址,目前用的是百度的
private void gengxin() {
rl_jindu.setVisibility(View.VISIBLE);//让进度条显示
UpdateAppUtils.from(this)
.apkPath(apkPath1)
.isForce(true)
.realUpdate();
}
下载之后,需要时时更新进度条
//引用UpdateAppReceiver,下载用的 后面有地址,里面有原始的代码,改进的代码,项目里的包。
private UpdateAppReceiver mReceiver;
//进度条布局 具体的布局太简单,我就不写了,写在布局的中间,默认为gone,需要的时候在显示
@Bind(R.id.rl_jindu)
RelativeLayout rl_jindu;
//进度条
@Bind(R.id.pb_jindu)
ProgressBar pb_jindu;
//进度条布局
@Bind(R.id.tv_jindu)
TextView tv_jindu;
下面这段代码写在oncreat里
//new一个UpdateAppReceiver,接收发过来的消息。
mReceiver = new UpdateAppReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String data = intent.getStringExtra("data");
// Log.e("接收到的数据是", data);
//更新progressBar,样式有点丑,读者可以根据实际情况自己写。
pb_jindu.setProgress(Integer.parseInt(data));
tv_jindu.setText(data + "%");
if (data.equals("100")){
rl_jindu.setVisibility(View.GONE);
}
}
};
IntentFilter intentFilter = new IntentFilter("android.intent.action.MAIN");
registerReceiver(mReceiver, intentFilter);
一个简单的更新就完成了。有问题可留言。
附上下载链接