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


1992

被折叠的 条评论
为什么被折叠?



