fix(mobile): use external storage for APK download and close app on install

- Change download path from getApplicationDocumentsDirectory to
  getExternalStorageDirectory for proper FileProvider support
- Add finishAffinity() after starting APK install intent

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-10 04:03:01 -08:00
parent fea90b7616
commit 88c59e92fd
2 changed files with 7 additions and 4 deletions

View File

@ -81,5 +81,8 @@ class MainActivity : FlutterActivity() {
intent.setDataAndType(apkUri, "application/vnd.android.package-archive") intent.setDataAndType(apkUri, "application/vnd.android.package-archive")
startActivity(intent) startActivity(intent)
// 关闭当前应用,让系统完成安装
finishAffinity()
} }
} }

View File

@ -48,8 +48,8 @@ class DownloadManager {
_status = DownloadStatus.downloading; _status = DownloadStatus.downloading;
_cancelToken = CancelToken(); _cancelToken = CancelToken();
// 使 // 使FileProvider
final dir = await getApplicationDocumentsDirectory(); final dir = await getExternalStorageDirectory() ?? await getApplicationSupportDirectory();
final savePath = '${dir.path}/app_update.apk'; final savePath = '${dir.path}/app_update.apk';
final tempPath = '${dir.path}/app_update.apk.tmp'; final tempPath = '${dir.path}/app_update.apk.tmp';
final file = File(savePath); final file = File(savePath);
@ -186,7 +186,7 @@ class DownloadManager {
/// APK /// APK
Future<void> cleanupDownloadedApk() async { Future<void> cleanupDownloadedApk() async {
try { try {
final dir = await getApplicationDocumentsDirectory(); final dir = await getExternalStorageDirectory() ?? await getApplicationSupportDirectory();
final file = File('${dir.path}/app_update.apk'); final file = File('${dir.path}/app_update.apk');
final tempFile = File('${dir.path}/app_update.apk.tmp'); final tempFile = File('${dir.path}/app_update.apk.tmp');
@ -206,7 +206,7 @@ class DownloadManager {
/// ///
Future<void> clearPartialDownload() async { Future<void> clearPartialDownload() async {
try { try {
final dir = await getApplicationDocumentsDirectory(); final dir = await getExternalStorageDirectory() ?? await getApplicationSupportDirectory();
final tempFile = File('${dir.path}/app_update.apk.tmp'); final tempFile = File('${dir.path}/app_update.apk.tmp');
if (await tempFile.exists()) { if (await tempFile.exists()) {
await tempFile.delete(); await tempFile.delete();