Androidアプリケーション強制更新ポリシー
Androidアプリケーションの強制更新の用途は非常に広く、特にオンラインになったばかりのアプリケーションには多かれ少なかれバグが存在するに違いない.特にモバイル決済に関する内容は、エラーが発生すると大きな損失をもたらすため、強制更新が特に重要である.
一般的に、更新を強制するポリシーは、アプリケーションの起動時にバックグラウンドを要求し、バックグラウンドでアプリケーションの最新バージョンの情報(アプリケーションバージョン番号、名前、コンテンツの説明の更新、パケットのサーバアドレスのダウンロード、更新を強制するかどうかのフラグビットを含む)を送信することです.
以下、以上の考え方に基づいて実装コードを書きます.
1.AndroidManifestの構成バージョン情報はAndroidManifestにあります.xmlには、Android apkのバージョンIDが定義されています.
ここで、package="com.demo」は私たちのバッグ名です.android:versionCode="1"はバージョン番号で、整数数字です.Android:versionName="1.0.0"はバージョン名で、文字列であり、ユーザーに表示されます.
AndroidManifestファイルのバージョン番号とバージョン名を読み込む必要がある場合はpackageManagerで簡単に入手できます.コードは次のとおりです.
2.バージョンチェックを行い、サービス側に最新バージョンのapkファイルを配置します.たとえば、次のようにします.http://localhost/mydemo/demo.apk同時に、このapkに対応するバージョン情報呼び出しインタフェースまたはファイルをサービス側に配置します.たとえば、次のようにします.http://localhost/mydemo/ver.json ver.jsonの内容は、[{"appname":"jtapp 12","apkname":"jtapp-12-updateapksamples.apk","verName":1.0.1,"verCode":2}]で、携帯電話クライアント上でバージョンの読み取りとチェックを行います.
サーバとクライアントのバージョンを比較し、更新操作を行います.
呼び出し方法:
ダウンロードの更新:
ダウンロードが完了し、handlerでプライマリuiスレッドに通知するとダウンロードダイアログがキャンセルされます.
アプリケーションのインストール
apkアプリケーションをmarketにパブリッシュすると、marketに似たようなモジュールが構築されていることがわかり、アプリケーションを自動的に更新したり、更新するかどうかを注意したりすることができます.では、自分のアプリケーションを自動的に更新する必要がある場合は、自分で内蔵するほうが便利ではないでしょうか.本明細書で説明するコードの多くはUpdateActivity.JAvaでは、更新プロセスをより友好的にするために、サービス側が更新されているかどうかを確認するために、最初のlauncherのActivityにスレッドを確立することができます.更新があるときにUpdateActivityを起動すると、よりスムーズな使用が可能になります.
(完了待ち)
一般的に、更新を強制するポリシーは、アプリケーションの起動時にバックグラウンドを要求し、バックグラウンドでアプリケーションの最新バージョンの情報(アプリケーションバージョン番号、名前、コンテンツの説明の更新、パケットのサーバアドレスのダウンロード、更新を強制するかどうかのフラグビットを含む)を送信することです.
以下、以上の考え方に基づいて実装コードを書きます.
1.AndroidManifestの構成バージョン情報はAndroidManifestにあります.xmlには、Android apkのバージョンIDが定義されています.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.demo" android:versionCode="1" android:versionName="1.0.0">
<application>
</application>
</manifest>
ここで、package="com.demo」は私たちのバッグ名です.android:versionCode="1"はバージョン番号で、整数数字です.Android:versionName="1.0.0"はバージョン名で、文字列であり、ユーザーに表示されます.
AndroidManifestファイルのバージョン番号とバージョン名を読み込む必要がある場合はpackageManagerで簡単に入手できます.コードは次のとおりです.
public static int getVerCode(Context context) {
int verCode = -1;
try {
verCode = context.getPackageManager().getPackageInfo(
"com.demo", 0).versionCode;
} catch (NameNotFoundException e) {
Log.e(TAG, e.getMessage());
}
return verCode;
}
public static String getVerName(Context context) {
String verName = "";
try {
verName = context.getPackageManager().getPackageInfo(
"com.demo", 0).versionName;
} catch (NameNotFoundException e) {
Log.e(TAG, e.getMessage());
}
return verName;
}
2.バージョンチェックを行い、サービス側に最新バージョンのapkファイルを配置します.たとえば、次のようにします.http://localhost/mydemo/demo.apk同時に、このapkに対応するバージョン情報呼び出しインタフェースまたはファイルをサービス側に配置します.たとえば、次のようにします.http://localhost/mydemo/ver.json ver.jsonの内容は、[{"appname":"jtapp 12","apkname":"jtapp-12-updateapksamples.apk","verName":1.0.1,"verCode":2}]で、携帯電話クライアント上でバージョンの読み取りとチェックを行います.
private boolean getServerVer () {
try {
String verjson = NetworkTool.getContent(Config.UPDATE_SERVER
+ Config.UPDATE_VERJSON);
JSONArray array = new JSONArray(verjson);
if (array.length() > 0) {
JSONObject obj = array.getJSONObject(0);
try {
newVerCode = Integer.parseInt(obj.getString("verCode"));
newVerName = obj.getString("verName");
} catch (Exception e) {
newVerCode = -1;
newVerName = "";
return false;
}
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
return false;
}
return true;
}
サーバとクライアントのバージョンを比較し、更新操作を行います.
if (getServerVerCode()) {
int vercode = Config.getVerCode(this); //
if (newVerCode > vercode) {
doNewVersionUpdate(); //
} else {
notNewVersionShow(); //
}
}
呼び出し方法:
private void notNewVersionShow() {
int verCode = Config.getVerCode(this);
String verName = Config.getVerName(this);
StringBuffer sb = new StringBuffer();
sb.append(" :");
sb.append(verName);
sb.append(" Code:");
sb.append(verCode);
sb.append(",
, !");
Dialog dialog = new AlertDialog.Builder(Update.this).setTitle(" ")
.setMessage(sb.toString())//
.setPositiveButton(" ",//
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
finish();
}
}).create();//
//
dialog.show();
}
private void doNewVersionUpdate() {
int verCode = Config.getVerCode(this);
String verName = Config.getVerName(this);
StringBuffer sb = new StringBuffer();
sb.append(" :");
sb.append(verName);
sb.append(" Code:");
sb.append(verCode);
sb.append(", :");
sb.append(newVerName);
sb.append(" Code:");
sb.append(newVerCode);
sb.append(", ?");
Dialog dialog = new AlertDialog.Builder(Update.this)
.setTitle(" ")
.setMessage(sb.toString())
//
.setPositiveButton(" ",//
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
pBar = new ProgressDialog(Update.this);
pBar.setTitle(" ");
pBar.setMessage(" ...");
pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
downFile(Config.UPDATE_SERVER + Config.UPDATE_APKNAME);
}
})
.setNegativeButton(" ",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// " "
finish();
}
}).create();//
//
dialog.show();
}
ダウンロードの更新:
void downFile(final String url) {
pBar.show();
new Thread() {
public void run() {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse response;
try {
response = client.execute(get);
HttpEntity entity = response.getEntity();
long length = entity.getContentLength();
InputStream is = entity.getContent();
FileOutputStream fileOutputStream = null;
if (is != null) {
File file = new File(
Environment.getExternalStorageDirectory(),
Config.UPDATE_SAVENAME);
fileOutputStream = new FileOutputStream(file);
byte[] buf = new byte[1024];
int ch = -1;
int count = 0;
while ((ch = is.read(buf)) != -1) {
fileOutputStream.write(buf, 0, ch);
count += ch;
if (length > 0) {
}
}
}
fileOutputStream.flush();
if (fileOutputStream != null) {
fileOutputStream.close();
}
down();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
ダウンロードが完了し、handlerでプライマリuiスレッドに通知するとダウンロードダイアログがキャンセルされます.
void down() {
handler.post(new Runnable() {
public void run() {
pBar.cancel();
update();
}
});
}
アプリケーションのインストール
void update() {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), Config.UPDATE_SAVENAME)),
"application/vnd.android.package-archive");
startActivity(intent);
}
apkアプリケーションをmarketにパブリッシュすると、marketに似たようなモジュールが構築されていることがわかり、アプリケーションを自動的に更新したり、更新するかどうかを注意したりすることができます.では、自分のアプリケーションを自動的に更新する必要がある場合は、自分で内蔵するほうが便利ではないでしょうか.本明細書で説明するコードの多くはUpdateActivity.JAvaでは、更新プロセスをより友好的にするために、サービス側が更新されているかどうかを確認するために、最初のlauncherのActivityにスレッドを確立することができます.更新があるときにUpdateActivityを起動すると、よりスムーズな使用が可能になります.
(完了待ち)