利用模板模式封装APP版本更新模块

xiaoxiao2021-02-28  74

在项目中做版本更新,流程如下:

1. 检查版本

2. 显示版本提示

3. 下载apk

4.  安装

于是我将相关代码进行重构,定义版本更新的骨架而将一些方法延迟到子类。

public abstract class CheckVersion { public static final String APK_FILE_PATH = ""; //apk保存路径 private Activity mActivity; public CheckVersion(Activity activity) { this.mActivity = activity; } /** * 检查版本 */ public final void checkVersion() { if (isUpdate()) { if (forceUpdate()) {//如果强制更新直接下载 downloadApk(); return; } //显示更新提示 showUpdateDialog(mActivity, new VersionDialogCallBack() { @Override public void onCancel() { cancelUpdate(); } @Override public void onSubmit() { downloadApk(); } }); } } //是否强制更新,当版本不稳定设置为true protected boolean forceUpdate() { return false; } //是否更新 protected abstract boolean isUpdate(); //显示更新对话框 protected abstract void showUpdateDialog(Activity context, VersionDialogCallBack callBack); //下载apk protected abstract void downloadApk(); //取消更新 protected void cancelUpdate() { T.ToastShort("您稍后可以在设置界面进行手动更新"); } //安装apk protected void installApk(File apk) { Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(apk), "application/vnd.android.package-archive"); mActivity.getApplicationContext().startActivity(intent); } //对话框回调 public interface VersionDialogCallBack { //关闭 void onCancel(); //更新 void onSubmit(); } }实现类(项目保密,提供测试)

public class TestChekVersion extends CheckVersion { public TestChekVersion(Activity activity) { super(activity); } @Override protected boolean isUpdate() { //请求数据,比较服务器版本号与当前版本 return true; } @Override protected void showUpdateDialog(Activity context, final VersionDialogCallBack callBack) { new AlertDialog.Builder(context) .setTitle("版本更新提示") .setMessage("1.优化主页布局\n2.修改BUG,添加友好提示") .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callBack.onCancel(); } }) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callBack.onSubmit(); } }) .create() .show(); } @Override protected void downloadApk() { //根据apk网络地址进行下载并保存到APK_FILE_PATH路径下,下载完成调用installApk安装。 String apkUrl = "xxxxxxx.apk";//获取方式 1.在检查更新isUpdate获取 2.在此方法获取 L.d("下载地址" + apkUrl); } }代码调用 new TestChekVersion(this).checkVersion(); //this为MainActivity

转载请注明原文地址: https://www.6miu.com/read-72052.html

最新回复(0)