android 后台更新apk,Android APK更新和注意事项

一、应用场景及介绍

不多讲,APP更新几乎每个APP都会用到。

更新APP的选择:

一、根据自己APP使用的网格框架,自己写一套下载的逻辑,移植兼容性不强。

二、用系统的下载器(DownloadManager),移植没兼容性问题。

二、更新的展示方式

APP内UI直接展示。

退到后台,通知栏更新。

三、更新内容分析

APK下载的URL,APK的版本号。

本地存储路径,APK本地存储名称等。

下载进度的回调,用于内部UI更新。

四、创建更新内容实体类

/**

* 更新apk的Bean

*/

public class AppUpdateBean implements Serializable {

// 更新APK的URL

private String apkUrl;

// 后台最新的版本号

private int versionCode;

// ==============附加信息可以不填写==============

// apk文件名称(本地的名称)

private String apkName;

public AppUpdateBean(String apkUrl, String apkName, int versionCode) {

this.apkUrl = apkUrl;

this.apkName = apkName;

this.versionCode = versionCode;

}

public String getApkUrl() {

return apkUrl;

}

public int getVersionCode() {

return versionCode;

}

public String getApkName() {

return apkName;

}

}

五、定义下载进度回调监听接口

/**

* 更新APK的监听

*/

public abstract class OnUpdateListener implements Serializable {

/**

* 下载失败

*/

public abstract void onFailed(String msg);

/**

* 下载成功

*/

public abstract void onSucceed(File apkFile);

/**

* 下载进度

* @param total 总APK大小

* @param current 当前进度

* @param progress 进度百分比

*/

public abstract void onProgress(int total, int current, float progress);

}

六、更新步骤分析

请求后台获取更新APK的内容。

判断后台APK的版本和当前使用APK的版本号,根据版本号情况进行更新。

下载前,判断本地有没有下载好,下载好根据版本号情况直接安装或者重装下载。

七、使用DownloadManager下载器进行下载更新

/**

* 下载更新APP的工具类

*/

public class DownloadUtils {

private static final String CONFIG = "APK_UPDATE";

private static final String DOWNLOADED = "DOWNLOADED";

// 默认APK本地名称

public static final String DEF_APK_NAME = "update.apk";

private final SharedPreferences mPreferences;

// 下载器

private DownloadManager downloadManager;

private Context mContext;

// 下载的ID

private long downloadId = -1;

// 下载要用到的类

private AppUpdateBean mUpdateBean;

private OnUpdateListener mOnUpdateListener;

private static Handler mHandler = new Handler(Looper.getMainLooper());

public DownloadUtils(Context context, AppUpdateBean updateBean) {

if (mContext == null) {

new RuntimeException("context is null");

}

this.mContext = context.getApplicationContext();

this.mUpdateBean = updateBean;

mPreferences = mContext.getSharedPreferences(CONFIG, Context.MODE_PRIVATE);

}

/**

* 注意:要自己添加内存卡读取权限

* 下载apk主要方法

*/

public void downloadAPK() {

// 1. 非空校验

if (mContext == null || mUpdateBean == null) {

return;

}

// 2. URL校验

String url = mUpdateBean.getApkUrl();

if (Te

你可能感兴趣的:(android,后台更新apk)