zoukankan      html  css  js  c++  java
  • 版本检测

    /**
         * 检测版本号
         */
        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();
        }
  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6203349.html
Copyright © 2011-2022 走看看