Android自动更新实现(Kotlin语言)

Java语言的实现可参考这位大佬的文章->传送门

一、新建一个AutoUpdater类

AutoUpdater.kt代码如下

package com.zwb.a2mesapp

import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Build
import android.os.Environment
import android.os.Handler
import android.os.Message
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.widget.ProgressBar
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.FileProvider
import java.io.BufferedReader
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.net.HttpURLConnection
import java.net.MalformedURLException
import java.net.URL
import java.security.SecureRandom
import java.util.regex.Pattern
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLSocketFactory

public class AutoUpdater(context:Context) {
    // 下载安装包的网络路径
    private var apkUrl:String  = "http://192.168.199.178:8003/"
    protected var checkUrl:String  = apkUrl + "output-metadata.json"



    // 下载线程
    private var downLoadThread:Thread?=null
    private var progress:Int=0 // 当前进度
    // 应用程序Context
    val mContext: Context=context
    // 保存APK的文件名
    private final val saveFileName:String  = "my.apk"
    private val apkFile:File = File(mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), saveFileName);
    // 是否是最新的应用,默认为false
    private var isNew:Boolean  = false
    private var intercept:Boolean  = false
    // 进度条与通知UI刷新的handler和msg常量
    private var mProgress: ProgressBar?=null
    private var txtStatus: TextView?=null

    private final val DOWN_UPDATE:Int  = 1
    private final val DOWN_OVER:Int  = 2;
    private final val SHOWDOWN:Int  = 3;


    public fun ShowUpdateDialog() {
        val builder:AlertDialog.Builder=AlertDialog.Builder(mContext)
        .setCancelable(false)
        .setTitle("软件版本更新")
        .setMessage("有最新的软件包,请下载并安装!")
        .setPositiveButton("立即下载",{dialog, which ->
            //回调触发
                Toast.makeText(this.mContext, "下载", Toast.LENGTH_SHORT).show()
                ShowDownloadDialog();
        })
        .setNegativeButton("以后再说",{dialog,which->
                dialog.dismiss()
        })

        builder.create().show();
    }

    private fun ShowDownloadDialog() {
        val dialog:AlertDialog.Builder  = AlertDialog.Builder(this.mContext)

        dialog.setCancelable(false)
        dialog.setTitle("软件版本更新")
        var inflater: LayoutInflater = LayoutInflater.from(this.mContext)
        var v: View = inflater.inflate(R.layout.progress, null)
        mProgress = v.findViewById(R.id.progress)
        txtStatus = v.findViewById(R.id.txtStatus)
        dialog.setView(v)
        dialog.setPositiveButton("取消"){dialog,which->
                this.intercept=true
        }
        dialog.show();
        Dow
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值