/** * 检测版本号 */ 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(); }