版本检测

 

/**
     * 检测版本号
     */
    private void checkVersion() {
        new Thread(){
            public void run() {
                //发送请求获取数据,参数则为请求json的链接地址
                //http://192.168.13.99:8080/update74.json    测试阶段不是最优
                //仅限于模拟器访问电脑tomcat
                Message msg = Message.obtain();
                long startTime = System.currentTimeMillis();
                try {
                    //1,封装url地址
                    URL url = new URL("http://10.0.2.2:8080/update74.json");
                    //2,开启一个链接
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    //3,设置常见请求参数(请求头)
                    
                    //请求超时
                    connection.setConnectTimeout(2000);
                    //读取超时
                    connection.setReadTimeout(2000);
                    
                    //默认就是get请求方式,
//                    connection.setRequestMethod("POST");
                    
                    //4,获取请求成功响应码
                    if(connection.getResponseCode() == 200){
                        //5,以流的形式,将数据获取下来
                        InputStream is = connection.getInputStream();
                        //6,将流转换成字符串(工具类封装)
                        String json = StreamUtil.streamToString(is);
                        Log.i(tag, json);
                        //7,json解析
                        JSONObject jsonObject = new JSONObject(json);
                        
                        //debug调试,解决问题
                        String versionName = jsonObject.getString("versionName");
                        mVersionDes = jsonObject.getString("versionDes");
                        String versionCode = jsonObject.getString("versionCode");
                        mDownloadUrl = jsonObject.getString("downloadUrl");

                        //日志打印    
                        Log.i(tag, versionName);
                        Log.i(tag, mVersionDes);
                        Log.i(tag, versionCode);
                        Log.i(tag, mDownloadUrl);
                        
                        //8,比对版本号(服务器版本号>本地版本号,提示用户更新)
                        if(mLocalVersionCode<Integer.parseInt(versionCode)){
                            //提示用户更新,弹出对话框(UI),消息机制
                            msg.what = UPDATE_VERSION;
                        }else{
                            //进入应用程序主界面
                            msg.what = ENTER_HOME;
                        }
                    }
                }catch(MalformedURLException e) {
                    e.printStackTrace();
                    msg.what = URL_ERROR;
                }catch (IOException e) {
                    e.printStackTrace();
                    msg.what = IO_ERROR;
                } catch (JSONException e) {
                    e.printStackTrace();
                    msg.what = JSON_ERROR;
                }finally{
                    //指定睡眠时间,请求网络的时长超过4秒则不做处理
                    //请求网络的时长小于4秒,强制让其睡眠满4秒钟
                    long endTime = System.currentTimeMillis();
                    if(endTime-startTime<4000){
                        try {
                            Thread.sleep(4000-(endTime-startTime));
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                    mHandler.sendMessage(msg);
                }
            };
        }.start();
        
        /*new Thread(new Runnable() {
            @Override
            public void run() {
                
            }
        });*/
    }

 

private Handler mHandler = new Handler(){
        @Override
        //alt+ctrl+向下箭头,向下拷贝相同代码
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case UPDATE_VERSION:
                //弹出对话框,提示用户更新
                showUpdateDialog();
                break;
            case ENTER_HOME:
                //进入应用程序主界面,activity跳转过程
                enterHome();
                break;
            case URL_ERROR:
                ToastUtil.show(getApplicationContext(), "url异常");
                enterHome();
                break;
            case IO_ERROR:
                ToastUtil.show(getApplicationContext(), "读取异常");
                enterHome();
                break;
            case JSON_ERROR:
                ToastUtil.show(getApplicationContext(), "json解析异常");
                enterHome();
                break;
            }
        }
    };

 

    /**
     * 弹出对话框,提示用户更新
     */
    protected void showUpdateDialog() {
        //对话框,是依赖于activity存在的
        Builder builder = new AlertDialog.Builder(this);
        //设置左上角图标
        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle("版本更新");
        //设置描述内容
        builder.setMessage(mVersionDes);
        
        //积极按钮,立即更新
        builder.setPositiveButton("立即更新", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //下载apk,apk链接地址,downloadUrl
                downloadApk();
            }
        });
        
        builder.setNegativeButton("稍后再说", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //取消对话框,进入主界面
                enterHome();
            }
        });
        
        //点击取消事件监听
        builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                //即使用户点击取消,也需要让其进入应用程序主界面
                enterHome();
                dialog.dismiss();
            }
        });
        
        builder.show();
    }

 

  /**
     * 进入应用程序主界面
     */
    protected void enterHome() {
        Intent intent = new Intent(this,HomeActivity.class);
        startActivity(intent);
        //在开启一个新的界面后,将导航界面关闭(导航界面只可见一次)
        finish();
    }

 

posted @ 2016-12-20 17:03  iFat  阅读(242)  评论(0编辑  收藏  举报