文章标题

来源:互联网 发布:电脑程序编程 编辑:程序博客网 时间:2024/05/29 15:39

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