fix: PackageInstaller session管理 — openSession失败abandon + commit失败abandon

This commit is contained in:
LukeMackin
2026-07-19 20:00:46 +08:00
parent 0f37573faf
commit ad1b3e3aca

View File

@@ -210,7 +210,13 @@ class MainActivity : AppCompatActivity() {
val packageInstaller = packageManager.packageInstaller val packageInstaller = packageManager.packageInstaller
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
val sessionId = packageInstaller.createSession(params) val sessionId = packageInstaller.createSession(params)
val session = packageInstaller.openSession(sessionId) val session: PackageInstaller.Session
try {
session = packageInstaller.openSession(sessionId)
} catch (e: Exception) {
packageInstaller.abandonSession(sessionId)
throw e
}
try { try {
apkFile.inputStream().use { input -> apkFile.inputStream().use { input ->
session.openWrite("package", 0, apkFile.length()).use { output -> session.openWrite("package", 0, apkFile.length()).use { output ->
@@ -225,6 +231,9 @@ class MainActivity : AppCompatActivity() {
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
) )
session.commit(pendingIntent.intentSender) session.commit(pendingIntent.intentSender)
} catch (e: Exception) {
session.abandon()
throw e
} finally { } finally {
session.close() session.close()
} }