Android之版本更新

Android应用版本更新

原理都是请求服务器端的数据,返回XML文件内容或者JSON内容数据

本人是用的方法是在服务器端建立一张APKVersion表

每当APKVersion经过修改之后,都会在在Version表中插入一条数据,并上传APK附件

现在看手机客户端获取应用版本信息代码

/**
	 * 提取当前应用版本信息
	 * @return
	 */
	public APKVersion getLocalVersion() {
		String packageName = getPackageName();
		PackageManager manager = getPackageManager();
		try {
			PackageInfo info = manager.getPackageInfo(packageName, 0);
			int versionCode = info.versionCode;
			String versionName = info.versionName;
			APKVersion version = new APKVersion(versionCode, versionName);
			return version;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}

获取服务器端最新版本信息代码
	/**
	 * 应用版本检测
	 * @param bool 出错是否进行提示
	 */
	public void invokeLastVersion(final boolean bool) {
		final APKVersion localVersion = getLocalVersion();
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				String methodName = "getLastVersion";
				String namespace = new GlobalConfigUtil(BaseActivity.this).getNamespace();
				String webServiceURL = new GlobalConfigUtil(BaseActivity.this).getWebUrl();
				Object obj = Ksoap2Util.invokeWebService(namespace, methodName, webServiceURL);
				if (obj != null) {
					Message msg = new Message();
					Bundle data = new Bundle();
					data.putBoolean("bool", bool);
					if (GlobalConfigUtil.WEBERROR.equals(obj.toString())) {
					} else {
						APKVersion lastVersion = GsonUtils
								.convertToEntity(obj.toString(),
										APKVersion.class);
						data.putSerializable("localVersion", localVersion);
						data.putSerializable("lastVersion", lastVersion);
					}
					msg.setData(data);
					versionHandler.sendMessage(msg);
				}
			}
		}).start();
	}

版本比对后下载服务器端APK资源

	/**
	 * 根据网络路径下载文件
	 * @param webUrl
	 * @return 
	 */
	public static int download(String webUrl) {
		BufferedInputStream in = null;
		BufferedOutputStream out = null;
		try {
			in = new BufferedInputStream(getInputStream(webUrl));
			out = new BufferedOutputStream(new FileOutputStream(getFile(webUrl)));
			byte[] buffer = new byte[1024];
			int i = 0;
			while ((i = in.read(buffer)) != -1) {
				out.write(buffer, 0, i);
			}
			out.flush();
			return 0;
		} catch (IOException e) {
			e.printStackTrace();
			return -1;
		} finally {
			IOUtils.freeResource(in, out);
		}
	}

	/**
	 * 获取网络文本文件数据流
	 * @param webUrl	网络文本文件路径
	 * @return
	 * @throws IOException
	 */
	public static InputStream getInputStream(String webUrl) throws IOException {
		URL url = new URL(webUrl);
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		return connection.getInputStream();
	}

	/**
	 * 安装APK操作
	 * @param file
	 */
	public void installAPK(File file) {
		Intent intent = new Intent(Intent.ACTION_VIEW);
		intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		context.startActivity(intent);
	}

如此就完成了检测服务器端的Version、Download、Install等过程

个人喜欢将下载过程放到Services中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值