Android版本更新功能

本文介绍了一个简单的APP版本更新流程,包括获取本地与服务器版本号并进行比较,使用okgo进行新版本apk的下载,以及安装新版本apk的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    APP都涉及到版本更新,这里我说一下思路,以及提供伪代码(从我项目里面直接拷贝出来的,
你们直接用,是用不了的)。
    思路就是:拿后台的接口,返回给你一个字段,是服务器上面的apk的版本号(每次把新版本
apk上传到公司服务器,都要把对应的版本号字段修改,写死的),跟你本地的apk版本号比较,
大于就提示用户更新下载。这里就涉及到下载功能,现在基本上都是okgo,反正我用的okgo。
涉及到下载就涉及到存储功能,android6.0以上都要动态给权限,前面有一篇就是说动态获取
权限的,不懂的可以看一下。
    1、首先获取权限,本地的版本号
// 要申请的权限
        String[] permission = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
        String title = "存储权限不可用";
        String content = "由于版本更新功能需要获取存储空间,为你存储新版本;\n否则,您将无法正常使用版本更新功能";
        initPermission(permission, title, content);
        String currentApkVerson = getCurrentApkVerson();//获取当前版本号
        currentVersonCode = Float.valueOf(currentApkVerson);//转换成float类型
    2、获取服务器的版本号,也要转换成float类型,进行比较,大于本地的版本号
就弹出对话框提示用户,有新版本需要更新。
    3、然后就是拿到链接下载APK
/**
     * 下载apk
     */

    private void downLoadApk(String apkUrl) {
        if (TextUtils.isEmpty(apkUrl)) {
            Utils.ShowToast(context, "更新失败!");
            return;
        }
        okDownload = OkDownload.getInstance();
//        String path = Environment.getDataDirectory() + "/data/" + getPackageName() + "/download/";
//        okDownload.setFolder(path);
        okDownload.getThreadPool().setCorePoolSize(1);
        okDownload.addOnAllTaskEndListener(this);
        okDownload.removeAll(true);//true表示删除线程的同时删除本地文件,false表示只删除线程
        okDownload.removeTask("task");//根据task删除线程
        GetRequest<File> getRequest = OkGo.<File>get(apkUrl);
        downloadTask = OkDownload.request(downLoadApkTag, getRequest)
                .priority(0)
                .fileName("name.apk")
                .register(new downloadListener(downLoadApkTag));
        downloadTask.start();
    }
    4、跳转安装界面(copy可以直接用):
    /**
     * 安装apk
     */
    private void installApk(String apkPath) {
        File apkFile = new File(apkPath);
        if (!apkFile.exists()) {
            return;
        }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        //判断是否是AndroidN以及更高的版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            //第二个参数要与清单文件里面配置的相同,provider的authorities
            Uri contentUri = FileProvider.getUriForFile(context, "com.xinggui.wz.chuangjiaoplatform.provider", apkFile);
            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
        } else {
            intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        }
        startActivity(intent);
        finish();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海晨忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值