Androidのバージョン更新
Androidアプリケーションバージョンの更新
サーバー側のデータを要求し、XMLファイルの内容またはJSONコンテンツのデータを返すのが原理です
私が使っている方法は、サーバー側にAPKVersionテーブルを作成することです.
APKVersionが変更されるたびに、Versionテーブルにデータを挿入し、APK添付ファイルをアップロードします.
今、携帯電話のクライアントを見て、アプリケーションバージョンの情報コードを取得します.
サーバ側の最新バージョン情報コードの取得
バージョン比較後のサーバ側APKリソースのダウンロード
これにより、サーバ側のVersion、Download、Installなどの検出プロセスが完了します.
個人的には、ダウンロードプロセスをServicesに配置するのが好きです.
サーバー側のデータを要求し、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に配置するのが好きです.