`

Android应用的更新检测与安装

 
阅读更多

Android应用的更新检测与安装大致步骤就是,从服务器获取应用的版本信息->与当前手机应用版本信息比较->下载最新版本应用->安装

1.从服务器获取应用的版本信息并检测是否更

 

	/*
         * 检测是否有新版本,有点话升级
	 */
	private void checkUpdate() {
		new Thread(){
			public void run() {
				Message msg=Message.obtain();
				try {
					URL url=new URL(getString(R.string.serverurl));
					//联网
					try {
						HttpsURLConnection conn=(HttpsURLConnection) url.openConnection();
						//设置请求方法
						conn.setRequestMethod("GET");
						//设置联网超时时间为4秒
						conn.setConnectTimeout(4000);  
						int code=conn.getResponseCode();
						if(code==200){
							//联网成功
							InputStream is=conn.getInputStream();
							//将流转换成数据串
							String result=StreamTools.readFromStream(is);
							try {
								JSONObject obj=new JSONObject(result);
								//获取服务器版本信息
								String version=obj.getString("version");
								String apkurl=obj.getString("apkurl");
								String discription=obj.getString("discription");
								//校验是否有新版本
								if(getVersionName().equals(version)){
									//版本一致,没有新版本,进入主页面
									mse.what=ENTER_HOME;
								}else{
									//有新版本,弹出升级对话框
									msg.what=SHOW_UPDATE_DIALOG;
								}
							} catch (JSONException e) {
								msg.what=JSON_ERROR;
								e.printStackTrace();
							}
						}
					} catch (IOException e) {
						msg.what=NETWORK_ERROR;
						e.printStackTrace();
					}
				} catch (MalformedURLException e) {
					msg.what=URL_ERROR;
					e.printStackTrace();
				}finally{
					handler.sendMessage(msg);
				}
			};
		}.start();
		
	}
 /**
	 * 获取版本信息
	 */
	private String getVersionName() {
		// 用于管理手机的APK
		PackageManager pm = getPackageManager();
		try {
			//获取功能清单文件
			PackageInfo info=pm.getPackageInfo(getPackageName(), 0);
			return info.versionName;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
			return "";
		}
	}

 2.对相应事件进行响应

private Handler handler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case SHOW_UPDATE_DIALOG:   //显示升级对话框
				showUpdateDialog();
				break;
            case ENTER_HOME:           //进入主界面
				enterHome();
				break;
            case JSON_ERROR:           //JSON解析出错
	            Toast.makeText(getApplicationContext(), "JSON出错", 0).show();
	            break;
            case NETWORK_ERROR:        //网络异常
            	Toast.makeText(getApplicationContext(), "网络异常", 0).show();
	            break;
            case URL_ERROR:            //URL出错
            	Toast.makeText(getApplicationContext(), "URL出错", 0).show();
	            break;
			default:
				break;
			}
		}
	};

 3.新版本的下载与安装

      /*
	 * 弹出升级对话框
	 */
	protected void showUpdateDialog() {
		AlertDialog.Builder builder=new Builder(this);
	//	builder.setCancelable(false); //强制升级
		builder.setOnCancelListener(new OnCancelListener() {
			
			public void onCancel(DialogInterface dialog) {
				//进入主页
				enterHome();
				dialog.dismiss();
			}
		});
		builder.setTitle("提示升级");
		builder.setMessage(discription);
		builder.setPositiveButton("立即升级", new OnClickListener() {
			
			public void onClick(DialogInterface dialog, int which) {
				// 下载apk,并安装替换
				if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
					//sdcard存在
					//final,第三方架包
					FinalHttp finalhttp=new FinalHttp();
					finalhttp.download(apkurl, Environment.getExternalStorageDirectory().getAbsolutePath()+"/mobilesafe2.0", 
							new AjaxCallBack<File>() {

						@Override
						public void onFailure(Throwable t, int errorNo,
								String strMsg) {
							// 下载失败
							t.printStackTrace();
							Toast.makeText(getApplicationContext(), "下载失败", 1).show();
							super.onFailure(t, errorNo, strMsg);
						}

						@Override
						public void onLoading(long count, long current) {
							tv_update_info.setVisibility(View.VISIBLE);  //显示进度文本
							//当前下载百分比
							int progress=(int) (current*100/count);
							tv_update_info.setText("下载进度"+progress+"%");
							super.onLoading(count, current);
						}

						@Override
						public void onSuccess(File t) {
							super.onSuccess(t);
							installAPK(t);
						}
						//安装下载好的Apk
						private void installAPK(File t) {
							Intent intent = new Intent();
							  intent.setAction("android.intent.action.VIEW");
							  intent.addCategory("android.intent.category.DEFAULT");
							  intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive");
							  startActivity(intent);
						}
					
					});
				}else {
					Toast.makeText(getApplicationContext(), "sdcard不存在,请安装再试",0).show();
					return;
				}
			}
		});
		builder.setNegativeButton("下次再说", new OnClickListener() {
			
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
				enterHome();   //进入主页
			}
		});
		builder.show();
	}

 服务器路径

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="serverurl">http://192.168.1.112:8080/updateinfo.html</string>
</resources>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics