自动更新
This commit is contained in:
@@ -2,10 +2,13 @@ package com.example.initiateaphonecallapp
|
|||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
|
import android.util.Log
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
@@ -24,6 +27,11 @@ import com.example.initiateaphonecallapp.ui.LoginSms.LoginSmsScreen
|
|||||||
import com.example.initiateaphonecallapp.ui.MainScreen
|
import com.example.initiateaphonecallapp.ui.MainScreen
|
||||||
import com.example.initiateaphonecallapp.ui.login.LoginScreen
|
import com.example.initiateaphonecallapp.ui.login.LoginScreen
|
||||||
import com.example.initiateaphonecallapp.ui.theme.InitiateAPhoneCallAppTheme
|
import com.example.initiateaphonecallapp.ui.theme.InitiateAPhoneCallAppTheme
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.json.JSONObject
|
||||||
|
import java.net.URL
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
private val requiredPermissions = arrayOf(
|
private val requiredPermissions = arrayOf(
|
||||||
@@ -52,6 +60,7 @@ class MainActivity : ComponentActivity() {
|
|||||||
private lateinit var storagePermissionManager: StoragePermissionManager
|
private lateinit var storagePermissionManager: StoragePermissionManager
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
checkUpdate()
|
||||||
CallRecordManager.initialize(this)
|
CallRecordManager.initialize(this)
|
||||||
println("🚀 Application: CallRecordManager 初始化完成")
|
println("🚀 Application: CallRecordManager 初始化完成")
|
||||||
|
|
||||||
@@ -131,6 +140,45 @@ class MainActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun checkUpdate() {
|
||||||
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
|
try {
|
||||||
|
// 1️⃣ 获取服务器版本信息
|
||||||
|
val jsonString = URL("http://120.26.58.34/app/version.json").readText()
|
||||||
|
// val jsonString = URL("http://121.43.240.248/app/version.json").readText()
|
||||||
|
val json = JSONObject(jsonString)
|
||||||
|
val serverVersionCode = json.getInt("version")
|
||||||
|
val apkUrl = json.getString("apkUrl")
|
||||||
|
|
||||||
|
// 2️⃣ 获取本地版本
|
||||||
|
val localVersionCode = 1
|
||||||
|
|
||||||
|
if (serverVersionCode > localVersionCode) {
|
||||||
|
Log.d("Update", "检测到新版本: $serverVersionCode")
|
||||||
|
runOnUiThread { promptDownloadApk(apkUrl) }
|
||||||
|
} else {
|
||||||
|
Log.d("Update", "已是最新版本")
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("Update", "检查更新失败: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun promptDownloadApk(apkUrl: String) {
|
||||||
|
AlertDialog.Builder(this)
|
||||||
|
.setTitle("发现新版本")
|
||||||
|
.setMessage("检测到新版本,是否下载并安装?")
|
||||||
|
.setPositiveButton("下载") { _, _ ->
|
||||||
|
// 打开浏览器下载
|
||||||
|
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(apkUrl))
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
.setNegativeButton("取消", null)
|
||||||
|
.setCancelable(false)
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
|
||||||
private fun hasAllPermissions(): Boolean {
|
private fun hasAllPermissions(): Boolean {
|
||||||
return requiredPermissions.all { permission ->
|
return requiredPermissions.all { permission ->
|
||||||
ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
|
ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.example.initiateaphonecallapp.ui.login
|
package com.example.initiateaphonecallapp.ui.login
|
||||||
|
|
||||||
data class LoginState(
|
data class LoginState(
|
||||||
val username: String = "sadmin",
|
val username: String = "",
|
||||||
val password: String = "admin123",
|
val password: String = "",
|
||||||
val isLoading: Boolean = false,
|
val isLoading: Boolean = false,
|
||||||
val errorMessage: String = "",
|
val errorMessage: String = "",
|
||||||
val isLoginSuccess: Boolean = false,
|
val isLoginSuccess: Boolean = false,
|
||||||
|
|||||||
Reference in New Issue
Block a user