Maison > Java > javaDidacticiel > le corps du texte

Application forcée à mettre à jour l'application Android

高洛峰
Libérer: 2017-02-28 16:04:49
original
3555 Les gens l'ont consulté

Les mises à jour forcées des applications Android sont très utiles. Les applications nouvellement lancées auront certainement plus ou moins de bugs, en particulier celles impliquant le paiement mobile, si quelque chose ne va pas, cela entraînera des pertes relativement importantes, il est donc particulièrement important de forcer les mises à jour.

D'une manière générale, la stratégie pour les mises à jour forcées est la suivante :

Lorsque l'application démarre, elle demande l'arrière-plan, et l'arrière-plan envoie la dernière version des informations de l'application (y compris le numéro de version de l'application, le nom, la description du contenu de la mise à jour, l'adresse du serveur pour télécharger le package, l'indicateur indiquant s'il faut forcer la mise à jour), etc.

Nous allons maintenant écrire le code d'implémentation basé sur les idées ci-dessus.

1. Informations sur la version de configuration d'AndroidManifest

L'identification de la version de chaque apk Android est définie dans AndroidManifest.xml :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo"
android:versionCode="1"
android:versionName="1.0.0">
<application>
</application>
</manifest>
Copier après la connexion

Parmi eux, package="com.demo" est le nom de notre package ; android:versionCode="1" est le code de version, qui est un nombre entier android:versionName=" ; 1.0 .0" est le nom de la version, qui est une chaîne et est affiché à l'utilisateur.

Lorsque vous avez besoin de lire le numéro de version et le nom de la version dans le fichier AndroidManifest, vous pouvez facilement l'obtenir à l'aide de packageManager. Le code est le suivant :

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;
}
Copier après la connexion

2. Effectuez la vérification de la version

Placez-le sur le serveur La dernière version du fichier apk, telle que : http://localhost/mydemo/demo.apk

En même temps, placez les informations de version appelant l'interface ou le fichier correspondant à cet apk sur le serveur , tel que : http://localhost/ mydemo/ver.json

Le contenu de ver.json est :

Le code est le suivant :

[{"appname":"jtapp12", "apkname":"jtapp-12-updateapksamples.apk","verName":1.0.1,"verCode":2}]

Ensuite, lisez la version sur le client mobile et Vérifiez :

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;
}
Copier après la connexion

Comparez les versions serveur et client et effectuez les opérations de mise à jour.

if (getServerVerCode()) {
int vercode = Config.getVerCode(this); // 用到前面第一节写的方法
if (newVerCode > vercode) {
doNewVersionUpdate(); // 更新新版本
} else {
notNewVersionShow(); // 提示当前为最新版本
}
}
Copier après la connexion

Méthode d'appel :

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(",\n已是最新版,无需更新!");
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();
}
Copier après la connexion

Téléchargement de la mise à jour :

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();
}
Copier après la connexion

Le téléchargement est terminé et le thread principal de l'interface utilisateur est averti via le gestionnaire pour annuler la boîte de dialogue de téléchargement.

void down() {
handler.post(new Runnable() {
public void run() {
pBar.cancel();
update();
}
});
}
Copier après la connexion

Installer l'application

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);
}
Copier après la connexion

Si vous publiez l'apk app Allez sur le marché, vous constaterez que le marché dispose d'un module similaire intégré, qui peut automatiquement mettre à jour ou vous rappeler si vous devez mettre à jour l'application. Ainsi, si votre propre application doit être automatiquement mise à jour, ne serait-il pas plus pratique d’en créer une vous-même ? La plupart du code mentionné dans cet article est implémenté dans UpdateActivity.Java Afin de rendre le processus de mise à jour plus convivial, vous pouvez créer un fil de discussion dans l'activité du lanceur initial pour vérifier s'il y a des mises à jour sur le serveur. Démarrez UpdateActivity lorsqu’il y a une mise à jour, ce qui rend l’expérience utilisateur plus fluide.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. J'espère également que tout le monde soutiendra le site Web PHP chinois.

Pour plus d'articles sur l'application de mise à jour forcée de l'application Android, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!