Kotlin:实现APP的本地升级与下载更新

这里就不写服务端的东西了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class Utils{
/**@param CheckUp 检查版本更新 **/


companion object {
val versionUrl = "http://www.xxx.com"//获取版本号
val versionWd = "https://www.sxxx/xx.apk"//获取Apk文件
fun Tos(str:String){
Toast.makeText(WdTools.getContext(),str,Toast.LENGTH_SHORT).show()
}

fun requestUpVersion(hand:Handler){
var versionOld = 0
val client = OkHttpClient.Builder().build() //初始化请求
thread {

//构建请求
val request = Request.Builder().url(versionUrl).build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {

val resText = response.body()?.string()
val temResText: String? = resText
versionOld = temResText!!.replace(" ","").toInt()
Log.d("@@versionWD:",versionOld.toString())
val msg = Message()
msg.what = 0x21
msg.arg1 = versionOld
hand.sendMessage(msg)

}

override fun onFailure(call: Call, e: IOException) {
val msg = Message()
msg.what = 0x22
hand.sendMessage(msg)
}
})


}

}
//实现下载apk
fun DownNew():Long{


val request = DownloadManager.Request(Uri.parse(versionWd))
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
request.setDestinationInExternalFilesDir(WdTools.getContext(), Environment.DIRECTORY_DOWNLOADS,"wd.apk")
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
// 设置 Notification 信息
request.setTitle("正在下载xx更新")
request.setDescription("下载完成后请点击打开")
request.setVisibleInDownloadsUi(true)
request.allowScanningByMediaScanner()
request.setMimeType("application/vnd.android.package-archive")

// 实例化DownloadManager 对象
val downloadManager = WdTools.getContext().getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
return downloadManager.enqueue(request)
}

/**
* 获取版本号
*/

fun getVersion(activity:Activity):Int{
var version:String? = null
try {
val manager = activity.packageManager
val info = manager.getPackageInfo(activity.packageName, 0)
version ="${info.versionCode}"

} catch (e:Exception) {

}
return version!!.toInt()
}



}

null

调用检查:如果服务端返回的版本号大于当前的,调用下载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(msg.arg1 >  Utils.getVersion(this@WDMain)){
Utils.Tos("新版本")

temDialog = AlertDialog.Builder(this@WDMain).setCancelable(false)
.setTitle("检测到新版本!").setMessage("是否立即更新?")
.setPositiveButton("确定"){
_,_ ->
Utils.DownNew()//下载更新
Utils.Tos("请稍后查看通知栏进度!")

}.setNegativeButton("取消"){
_,_ ->
}.create()
temDialog!!.show()
} else{
Utils.Tos("当前是最新版本")
}

null