文章标题

Android App升级流程


 本文对Android App升级流程做了部分概要,讲解了怎样获取本地App版本号及获取网络App版本号,获取之后的部分操作。

升级流程图
这里写图片描述

代码部分
获取本地版本app名:

private String getVersionName(){
        //包管理器
        PackageManager packageManager = getPackageManager();
        try {
            //获取包的信息
            PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
            String versionName = packageInfo.versionName;//版本名
            System.out.println("versionName="+versionName);
            return versionName;
        } catch (NameNotFoundException e) {//没有找到包名的时候会走此异常
            e.printStackTrace();
        }
        return "";
    }

获取本地app版本号:

private int getVersionCode(){
        //包管理器
        PackageManager packageManager = getPackageManager();
        try {
            //获取包的信息
            PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
            int versionCode = packageInfo.versionCode;//版本号
            System.out.println("versionCode="+versionCode);
            return versionCode;
        } catch (NameNotFoundException e) {//没有找到包名的时候会走此异常
            e.printStackTrace();
        }
        return -1;
    }
从服务器获取版本进行校验:因为需要连网获取版本信息,所以必须启动子线程,否则主线程超过5秒会堵塞并导致程序崩溃。
private void checkVersion(){
        //启动子线程一部加载数据
        new Thread(){
            @Override
            public void run() {     
                HttpURLConnection conn=null;
                    URL url=new URL(服务器地址);

                        conn=(HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("GET");//设置请求方式
                        conn.setConnectTimeout(5000);//设置链接超时
                        conn.setReadTimeout(5000);//设置响应超时,连接上了,但服务器迟迟不给响应
                        conn.connect();//链接服务器

                        int responseCode = conn.getResponseCode();//获取响应码
                        if(responseCode==200){
                            InputStream inputStream = conn.getInputStream();
                            String result = StreamUtils.readFromStream(inputStream);
                            System.out.println("网络返回结果:"+result);

借助一个工具类(StreamUtils)将返回的结果转换成json格式的数据,代码如下:

public class StreamUtils {  
    /**将输入流读取成String返回
     * @throws IOException */
    public static String readFromStream(InputStream in) throws IOException{
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        int len=0;
        byte[] buffer=new byte[1024];
        while((len=in.read(buffer))!=-1){
            out.write(buffer, 0, len);
        }       
        String result=out.toString();
        in.close();
        out.close();        
        return result;
    }
}

接下来解析json字符串,拿到我们想要的版本号跟版本名:

//解析json    
                            JSONObject jo=new JSONObject(result);
                            mVersionName = jo.getString("versionName");
                            mVersionCode = jo.getInt("versionCode");

接下下判断是否有更新:

if(mVersionCode>getVersionCode()){//判断是否有更新
                                //如果服务器的versionCode大于本地的versionCode,说明有更新
                                //弹出升级对话框
                            }
对话框内容:

protected void showUpdateFialog() {

    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setTitle("最新版本:"+mVersionName);
    builder.setPositiveButton("立即更新", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            System.out.println("立即更新");
        }
    });

    builder.setNegativeButton("以后再说", null);
    builder.create().show();
}

此部分有异常产生,请自行处理。
签名冲突将在下一篇中继续讲解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值