Kotlin安卓app版本自动升级设计实现

序:

app项目上线后需要持续发版迭代,通过版本控制自动升级(或者说当app启动时,自动检测有最新版本,自动安装升级)就显得尤为重要,那么接下来设计具体如何落地。

总体思路就是当app启动时,去调用后端一个查询最新版本号的接口,与app的当前版本号比较,如果接口里发布了大于当前版本号的app就提示用户升级,用户点击升级后,自动下载安装。

一、数据库设计:

我这里使用的mysql5.7,表结构设计如下:

sql 复制代码
CREATE TABLE `app_sersion` (
  `app_version_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `app_version` varchar(255) DEFAULT NULL COMMENT 'app版本号',
  `app_download_url` varchar(255) DEFAULT NULL COMMENT 'app下载地址',
  PRIMARY KEY (`app_version_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='app版本管理';

二、java后端接口设计:

写一个app_sersion表的增删改查,代码这里不贴出来了,连同安卓端代码和sql统一打包到以下链接,有需要的朋友可以下载。

代码下载地址:

https://download.csdn.net/download/gaowenhui2008/92856583

三、安卓端(Kotlin实现)设计:

复制代码
MyLoginActivity.kt
复制代码
onCreate方法中调用update_soft()方法
Kotlin 复制代码
   public fun update_soft() {

        val manager = UpdateManager(this)
        manager.checkUpdate();

    }
Kotlin 复制代码
 /**
     * 检测软件更新
     *
     * @throws IOException
     * @throws NotFoundException
     */
    @Throws(Resources.NotFoundException::class, IOException::class)
    fun checkUpdate() {
        Thread(object : Runnable {
            override fun run() {
                // TODO Auto-generated method stub

                try {
                    if (isUpdate) {
                        // 显示提示对话框
                        Looper.prepare()
                        showNoticeDialog()
                        Looper.loop()
                       // Log.d("消息", "有新版本")
                    } else {
                        // Toast.makeText(mContext, R.string.soft_update_no,
                        // Toast.LENGTH_LONG).show();

                        // Log.d("消息", "已是最新版本");
                    }
                } catch (e: Resources.NotFoundException) {
                    // TODO Auto-generated catch block
                    // Toast.makeText(UpdateManager.this, "QQ空间", 2).show();
                    e.printStackTrace()
                } catch (e: IOException) {
                    // TODO Auto-generated catch block
                    e.printStackTrace()
                }
            }
        }).start()
    }
Kotlin 复制代码
/**
     * 显示软件更新对话框
     */
    private fun showNoticeDialog() {
        // 构造对话框
        val builder: AlertDialog.Builder = Builder(mContext)
        builder.setTitle(R.string.soft_update_title)
        builder.setMessage(R.string.soft_update_info)
        builder.setCancelable(false)
        // 更新
        builder.setPositiveButton(
            R.string.soft_update_updatebtn,
            object : DialogInterface.OnClickListener {
                public override fun onClick(dialog: DialogInterface?, which: Int) {
                    //dialog.dismiss();
                    // 显示下载对话框
                    showDownloadDialog()
                }
            })
        // 稍后更新
        builder.setNegativeButton(
            R.string.soft_update_later,
            object : DialogInterface.OnClickListener {
                public override fun onClick(dialog: DialogInterface, which: Int) {
                    dialog.dismiss()
                }
            })
        val noticeDialog: Dialog = builder.create()
        noticeDialog.show()
    }
Kotlin 复制代码
  /**
     * 显示软件下载对话框
     */
    private fun showDownloadDialog() {
        // 构造软件下载对话框
        val builder: AlertDialog.Builder = Builder(mContext)
        builder.setTitle(R.string.soft_updating)
        // 给下载对话框增加进度条
        val inflater = LayoutInflater.from(mContext)
        val v: View = inflater.inflate(R.layout.layout_softupdate_progress, null)
        mProgress = v.findViewById<View?>(R.id.update_progress) as ProgressBar
        builder.setView(v)
        // 取消更新
        builder.setNegativeButton(
            R.string.soft_update_cancel,
            object : DialogInterface.OnClickListener {
                public override fun onClick(dialog: DialogInterface, which: Int) {
                    dialog.dismiss()
                    // 设置取消状态
                    cancelUpdate = true
                }
            })
        mDownloadDialog = builder.create()
        mDownloadDialog!!.show()
        // 现在文件
        downloadApk()
    }

四、最终效果:

相关推荐
_祝你今天愉快9 小时前
从驱动来分析服务的添加过程
android
Dovis(誓平步青云)12 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
alexhilton13 小时前
让架构边界变成可执行的测试
android·kotlin·android jetpack
hai_android14 小时前
SendChannel 与 ReceiveChannel 通信机制
android
数据治理自习室16 小时前
AI 应用评测体系(GraphRAG)
android·大数据·人工智能·kotlin
爱笑鱼16 小时前
Android 系统启动机制(五):system_server 是 init 启动的,还是 Zygote fork 出来的?
android
智购科技无人售货机工厂17 小时前
2026自动售货机防拆机物理安全设计:从安全螺丝到结构互锁的工程实践~YH
android·网络·驱动开发·python·单片机·安全·云原生
开开心心就好17 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
Dovis(誓平步青云)18 小时前
拍视频前先把镜头想清楚:做一个分镜取景辅助器
android·java·服务器·javascript·人工智能
峥嵘life19 小时前
Android16 系统 APEX 模块说明
android·大数据·开发语言