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

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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值