diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/UpdateManager.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/UpdateManager.kt new file mode 100644 index 000000000..ede1ea805 --- /dev/null +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/UpdateManager.kt @@ -0,0 +1,82 @@ +package org.yuzu.yuzu_emu + +import android.app.AlertDialog +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.AsyncTask +import android.os.Build +import android.util.Log +import com.squareup.okhttp.OkHttpClient +import com.squareup.okhttp.Request +import com.squareup.okhttp.Response +import org.json.JSONObject + +class UpdateManager(private val context: Context) { + + private val TAG = "UpdateManager" + + fun checkForUpdates() { + val currentVersion = BuildConfig.VERSION_NAME // 当前应用版本 + val updateUrl = "https://your-server.com/check_update.php" // 用于检查更新的服务器端点 + + // 异步任务执行更新检查 + object : AsyncTask() { + override fun doInBackground(vararg params: Void): String { + try { + val client = OkHttpClient() + val request = Request.Builder() + .url(updateUrl) + .build() + + val response: Response = client.newCall(request).execute() + if (response.isSuccessful) { + return response.body().string() + } + } catch (e: Exception) { + Log.e(TAG, "Error checking for updates: ${e.message}") + } + return "" + } + + override fun onPostExecute(result: String) { + super.onPostExecute(result) + if (result.isNotEmpty()) { + handleUpdateResponse(result, currentVersion) + } + } + }.execute() + } + + private fun handleUpdateResponse(response: String, currentVersion: String) { + try { + val jsonObject = JSONObject(response) + val latestVersion = jsonObject.getString("version") + val releaseNotes = jsonObject.getString("release_notes") + val downloadUrl = jsonObject.getString("download_url") + + if (latestVersion != currentVersion) { + showUpdateDialog(latestVersion, releaseNotes, downloadUrl) + } + } catch (e: Exception) { + Log.e(TAG, "Error parsing update response: ${e.message}") + } + } + + private fun showUpdateDialog(version: String, releaseNotes: String, downloadUrl: String) { + val alertDialogBuilder = AlertDialog.Builder(context) + alertDialogBuilder.setTitle("有新的更新可用") + alertDialogBuilder.setMessage("版本: $version\n\n$releaseNotes") + alertDialogBuilder.setPositiveButton("立即更新") { dialog, _ -> + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse(downloadUrl) + context.startActivity(intent) + dialog.dismiss() + } + alertDialogBuilder.setNegativeButton("稍后再说") { dialog, _ -> + dialog.dismiss() + } + val alertDialog = alertDialogBuilder.create() + alertDialog.show() + } +}