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に配置するのが好きです.