From de4148e246dbfb2cc545fd79a81936be77c49748 Mon Sep 17 00:00:00 2001 From: MNCHL <152583790+MNCHL@users.noreply.github.com> Date: Tue, 26 Dec 2023 21:15:27 +0800 Subject: [PATCH] Update UpdateManager.kt --- .../java/org/yuzu/yuzu_emu/UpdateManager.kt | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) 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 index 6a00e8886..59e458abb 100644 --- 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 @@ -85,3 +85,85 @@ object UpdateManager { } } +private fun showNoUpdateAvailableMessage(context: Context) { + Toast.makeText( + context, + "您的应用已经是最新版本。", + Toast.LENGTH_SHORT + ).show() +} + +private fun downloadAndInstallUpdate(context: Context) { + val downloadUrl = + "https://your-server.com/api/downloadLatestVersion" // 替换为实际的下载链接 + + val request = DownloadManager.Request(Uri.parse(downloadUrl)) + request.apply { + setTitle("App更新") + setDescription("正在下载新版本...") + setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) + setDestinationInExternalPublicDir( + Environment.DIRECTORY_DOWNLOADS, + "YourAppName.apk" + ) // 替换为您的应用名称 + } + + val downloadManager = + context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + val downloadId = downloadManager.enqueue(request) + + // 您可以存储下载ID并用于检查下载状态或处理重试 + + // 当下载完成时安装下载的APK + val onCompleteReceiver = DownloadCompleteReceiver() + onCompleteReceiver.setDownloadId(downloadId) + context.registerReceiver( + onCompleteReceiver, + IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE) + ) +} + +class DownloadCompleteReceiver : BroadcastReceiver() { + private var downloadId: Long = -1 + + fun setDownloadId(id: Long) { + downloadId = id + } + + override fun onReceive(context: Context?, intent: Intent?) { + if (context == null || intent == null) { + return + } + + if (intent.action == DownloadManager.ACTION_DOWNLOAD_COMPLETE) { + val downloadManager = + context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + val query = DownloadManager.Query().setFilterById(downloadId) + val cursor = downloadManager.query(query) + + if (cursor.moveToFirst()) { + val status = + cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) + if (status == DownloadManager.STATUS_SUCCESSFUL) { + val uri = Uri.parse( + cursor.getString( + cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI) + ) + ) + installApk(context, uri) + } else { + // 处理下载失败 + } + } + + cursor.close() + } + } + + private fun installApk(context: Context, uri: Uri) { + val intent = Intent(Intent.ACTION_VIEW) + intent.setDataAndType(uri, "application/vnd.android.package-archive") + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + context.startActivity(intent) + } +}