diff --git a/frontend/mobile-app/android/app/src/main/kotlin/com/rwadurian/rwa_android_app/MainActivity.kt b/frontend/mobile-app/android/app/src/main/kotlin/com/rwadurian/rwa_android_app/MainActivity.kt index 9e6c8f20..e6442502 100644 --- a/frontend/mobile-app/android/app/src/main/kotlin/com/rwadurian/rwa_android_app/MainActivity.kt +++ b/frontend/mobile-app/android/app/src/main/kotlin/com/rwadurian/rwa_android_app/MainActivity.kt @@ -81,5 +81,8 @@ class MainActivity : FlutterActivity() { intent.setDataAndType(apkUri, "application/vnd.android.package-archive") startActivity(intent) + + // 关闭当前应用,让系统完成安装 + finishAffinity() } } diff --git a/frontend/mobile-app/lib/core/updater/download_manager.dart b/frontend/mobile-app/lib/core/updater/download_manager.dart index 9dc7668d..83c58689 100644 --- a/frontend/mobile-app/lib/core/updater/download_manager.dart +++ b/frontend/mobile-app/lib/core/updater/download_manager.dart @@ -48,8 +48,8 @@ class DownloadManager { _status = DownloadStatus.downloading; _cancelToken = CancelToken(); - // 使用应用专属目录(无需额外权限) - final dir = await getApplicationDocumentsDirectory(); + // 使用外部缓存目录(FileProvider 标准支持路径) + final dir = await getExternalStorageDirectory() ?? await getApplicationSupportDirectory(); final savePath = '${dir.path}/app_update.apk'; final tempPath = '${dir.path}/app_update.apk.tmp'; final file = File(savePath); @@ -186,7 +186,7 @@ class DownloadManager { /// 删除已下载的 APK 文件和临时文件 Future cleanupDownloadedApk() async { try { - final dir = await getApplicationDocumentsDirectory(); + final dir = await getExternalStorageDirectory() ?? await getApplicationSupportDirectory(); final file = File('${dir.path}/app_update.apk'); final tempFile = File('${dir.path}/app_update.apk.tmp'); @@ -206,7 +206,7 @@ class DownloadManager { /// 清除断点续传的临时文件(用于强制重新下载) Future clearPartialDownload() async { try { - final dir = await getApplicationDocumentsDirectory(); + final dir = await getExternalStorageDirectory() ?? await getApplicationSupportDirectory(); final tempFile = File('${dir.path}/app_update.apk.tmp'); if (await tempFile.exists()) { await tempFile.delete();