自动更新

This commit is contained in:
2025-12-07 16:01:10 +08:00
parent cde4d0c0e9
commit 1bd7a42a9a
2 changed files with 50 additions and 2 deletions

View File

@@ -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

View File

@@ -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,