当前位置: 代码迷 >> Android >> Android应用的更新检测与装配
  详细解决方案

Android应用的更新检测与装配

热度:27   发布时间:2016-04-27 23:53:08.0
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>

?

  相关解决方案