diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index b952496..35cef3b 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -16,8 +16,8 @@ android {
applicationId = "com.rainy.token"
minSdk = 31
targetSdk = 35
- versionCode = 17
- versionName = "1.6.7"
+ versionCode = 18
+ versionName = "1.6.8"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9cd6552..83aafee 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
+
diff --git a/app/src/main/java/com/rainy/token/ui/settings/UpdateViewModel.kt b/app/src/main/java/com/rainy/token/ui/settings/UpdateViewModel.kt
index 6cd9d95..41183ff 100644
--- a/app/src/main/java/com/rainy/token/ui/settings/UpdateViewModel.kt
+++ b/app/src/main/java/com/rainy/token/ui/settings/UpdateViewModel.kt
@@ -80,19 +80,31 @@ class UpdateViewModel @Inject constructor(
}
fun install(file: File) {
- if (context.packageManager.canRequestPackageInstalls()) {
- _uiState.update { it.copy(phase = Phase.Ready(file)) }
- val authority = context.packageName + ".fileprovider"
- val uri = FileProvider.getUriForFile(context, authority, file)
- val intent = Intent(Intent.ACTION_VIEW).apply {
+ if (!context.packageManager.canRequestPackageInstalls()) {
+ _uiState.update { it.copy(phase = Phase.NeedInstallPermission) }
+ return
+ }
+ _uiState.update { it.copy(phase = Phase.Ready(file)) }
+ val authority = context.packageName + ".fileprovider"
+ val uri = try {
+ FileProvider.getUriForFile(context, authority, file)
+ } catch (e: Exception) {
+ _uiState.update { it.copy(phase = Phase.Error("安装文件无效:" + (e.message ?: "未知错误"))) }
+ return
+ }
+ val actionView = Intent(Intent.ACTION_VIEW).apply {
+ setDataAndType(uri, "application/vnd.android.package-archive")
+ addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_ACTIVITY_NEW_TASK)
+ }
+ val started = runCatching { context.startActivity(actionView) }
+ if (started.isFailure) {
+ val actionInstall = Intent(Intent.ACTION_INSTALL_PACKAGE).apply {
setDataAndType(uri, "application/vnd.android.package-archive")
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_ACTIVITY_NEW_TASK)
}
- runCatching { context.startActivity(intent) }.onFailure { e ->
- _uiState.update { it.copy(phase = Phase.Error(e.message ?: "cannot start installer")) }
+ runCatching { context.startActivity(actionInstall) }.onFailure { e ->
+ _uiState.update { it.copy(phase = Phase.Error(e.message ?: "无法启动安装器")) }
}
- } else {
- _uiState.update { it.copy(phase = Phase.NeedInstallPermission) }
}
}
}