fix: PackageInstaller session管理 — openSession失败abandon + commit失败abandon
This commit is contained in:
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user