一、App版本自动更新的条件是服务器端的app版本大于本地app的版本,因此首先请求服务器接口拿到服务器端的app版本和本地app版本进行比较,本地app版本可以通过传入的context获取到versionName。
public static String getPackageVersion(Context ctx) {
try {
PackageManager e = ctx.getPackageManager();
PackageInfo info = e.getPackageInfo(ctx.getPackageName(), 0);
return info.versionName;
} catch (Exception var3) {
var3.printStackTrace();
return "";
}
}
二、下载apk
若采用retrofit,DownloadProgressInterceptor可拦截下载的进度。
ownloadProgressInterceptor downloadProgress = new DownloadProgressInterceptor(new DownloadProgressInterceptor.DownloadProgressListener() {
//bytesRead下载进度
//contentLength文件一共多大
//done是否下载完成
@Override
public void update(long bytesRead, long contentLength, boolean done) {
if (mStateListener != null) {
mStateListener.onUpdateProgress(bytesRead, contentLength);
}
}
});
三、安装更新后的apk
Intent install = new Intent();
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
install.setAction(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
context.startActivity(install);
四、删除已经下载的apk文件
在MainActivity中添加onCreate周期中,调用删除已下载的apk。
public static void removeFile(Context context) {
if (null != context) {
//UPDATE_PATH是apk下载的路径
if (null != UPDATE_PATH) {
File downloadFile = new File(UPDATE_PATH);
if (null != downloadFile && downloadFile.exists()) {
downloadFile.delete()
Log.d("---", "已经删除")
}
}
}
}
五、流程图:
app版本升级.png
网友评论