带进度条的版本更新

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);

一个简单的更新就完成了。有问题可留言。

附上下载链接

https://download.csdn.net/download/qq_30299243/10554754

猜你喜欢

转载自blog.csdn.net/qq_30299243/article/details/81137755
今日推荐