From 75909d953cdb5eb5af2ec49610792ad217331512 Mon Sep 17 00:00:00 2001 From: fengge <844143714@qq.com> Date: Wed, 15 Jul 2026 12:14:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/stand/standapp/UpdateManager.kt | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/stand/standapp/UpdateManager.kt b/app/src/main/java/com/stand/standapp/UpdateManager.kt index 95589f7..29e0961 100644 --- a/app/src/main/java/com/stand/standapp/UpdateManager.kt +++ b/app/src/main/java/com/stand/standapp/UpdateManager.kt @@ -34,21 +34,15 @@ class UpdateManager(private val context: Context) { private val fileName = "StandApp_Update.apk" /** - * 获取或创建公共下载目录下的文件 URI + * 获取应用缓存目录下的临时文件 URI,避免申请外部存储权限 */ - private fun getPublicDownloadUri(): Uri? { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - val contentValues = ContentValues().apply { - put(MediaStore.MediaColumns.DISPLAY_NAME, fileName) - put(MediaStore.MediaColumns.MIME_TYPE, "application/vnd.android.package-archive") - put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS) - } - val contentResolver = context.contentResolver - return contentResolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues) - } else { - val file = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName) - return Uri.fromFile(file) + private fun getCacheFileUri(): Uri { + val cacheDir = context.externalCacheDir ?: context.cacheDir + val file = File(cacheDir, fileName) + if (file.exists()) { + file.delete() } + return Uri.fromFile(file) } fun checkUpdate() { @@ -216,10 +210,9 @@ class UpdateManager(private val context: Context) { var targetUri: Uri? = null try { - targetUri = getPublicDownloadUri() - if (targetUri == null) throw IOException("无法创建文件记录") - - outputStream = context.contentResolver.openOutputStream(targetUri) + targetUri = getCacheFileUri() + val file = File(targetUri.path!!) + outputStream = FileOutputStream(file) inputStream = body.byteStream() val totalBytes = body.contentLength() @@ -228,7 +221,7 @@ class UpdateManager(private val context: Context) { var totalRead: Long = 0 while (inputStream.read(buffer).also { bytesRead = it } != -1) { - outputStream?.write(buffer, 0, bytesRead) + outputStream.write(buffer, 0, bytesRead) totalRead += bytesRead if (totalBytes > 0) { @@ -239,11 +232,11 @@ class UpdateManager(private val context: Context) { } } } - outputStream?.flush() + outputStream.flush() handler.post { progressDialog?.dismiss() - Toast.makeText(context.applicationContext, "下载完成,文件已保存到系统下载目录", Toast.LENGTH_SHORT).show() + Toast.makeText(context.applicationContext, "下载完成,正在安装...", Toast.LENGTH_SHORT).show() installApk(targetUri) } } catch (e: Exception) {