版本更新主要是检测当前应用版本号和服务器版本号相比较,如果当前应用版本号与服务器版本号不同,则提示用户进行更新,然后下载APK文件并进行安装。
我这里使用的是xutils来下载文件。
onCreat函数,直接显示了提示更新的对话框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_addinfo);
context = AddInfoActivity.this;
HttpUtils http = new HttpUtils();
http.send(HttpMethod.POST, "http://10.168.6.79:8080/NSTGPS/NSTGPSController", new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<String> response) {
//获取当前版本号的方法在下面getVersionName(),测试方便这里并没有进行比较。
String version = response.result;
Dialog dialog = new AlertDialog.Builder(context).setTitle("版本更新").setMessage("检测到新版本,是否立即更新?")
.setPositiveButton("立即更新", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
downLoadApk();
}
}).setNegativeButton("暂不更新", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
dialog.show();
}
});
}
当点击立即更新按钮时会调用下载文件方法,在这个方法里会创建并显示一个进度条提示框,进度与下载进度相同步,下载完后直接在本方法里调用了安装界面。
/*
* 下载APK
*/
protected void downLoadApk() {
// 进度条对话框
final ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("正在下载更新...");
progressDialog.show();
final File apkFile = new File(Environment.getExternalStorageDirectory(), "AppName.apk");
HttpUtils httpd = new HttpUtils();
httpd.download("http://10.168.6.79:8080/NSTGPS/apk/xxx.apk", apkFile.getPath(), new RequestCallBack<File>() {
// 更新进度条
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
progressDialog.setProgress((int) ((double) current / (double) total * 100));
}
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<File> arg0) {
installApk(apkFile);
progressDialog.dismiss();
}
});
}
/*
* 安装apk
*/
protected void installApk(File file) {
Intent intent = new Intent();
// 执行动作
intent.setAction(Intent.ACTION_VIEW);
// 执行的数据类型
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
}
最后附上获取当前版本号代码
/*
* 获取当前程序的版本号
*/
private String getVersionName() {
// 获取packagemanager的实例
PackageManager packageManager = getPackageManager();
// getPackageName()是你当前类的包名,0代表是获取版本信息
PackageInfo packInfo = null;
try {
packInfo = packageManager.getPackageInfo(getPackageName(), 0);
return packInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return null;
}
大功告成!