gpt4 book ai didi

Android - 使用 PackageInstaller 和 PackageInstaller.Session 静默安装 APK

转载 作者:行者123 更新时间:2023-12-03 21:58:28 41 4
gpt4 key购买 nike

查看 Android (AOSP) 的源代码,installPackage标记为已弃用并检查 Android 的 PackageManager 应用程序,它使用 PackageInstaller创建一个 PackageInstaller.Session 的类实例来执行 APK 的安装。

我正在尝试在我的应用程序中做同样的事情。我使用系统 key 进行了签名,并且确实包含了 INSTALL_PACKAGES list 中的许可。

这是我的代码:

    val packageName = "com.spotify.music"
val inputStream = File(filesDir, "spotify.apk").inputStream()

// ...

val packageInstaller = context.packageManager.packageInstaller
val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
params.setAppPackageName(packageName)

val sessionId = packageInstaller.createSession(params)
val session = packageInstaller.openSession(sessionId)
val out = session.openWrite("COSU", 0, -1)
inputStream.copyTo(out)
session.fsync(out)
inputStream.close()
out.close()
session.commit(null)

但是,我收到以下奇怪的空指针异常:
Error while installing: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.AppOpsManager.checkPackage(int, java.lang.String)' on a null object reference
有人知道这里出了什么问题吗?

最佳答案

你不能通过nullsession.commit() .请参阅 Android Developers 上的文档.您需要的是一个 IntentSender,它是从 PendingIntent 中获得的,而 PendingIntent 又应包含您的应用程序可以接收的 Intent (可以在 Activity、Service 或 BroadcastReceiver 中)。

提交 session 时,结果将作为附加内容包含在接收到的 Intent 中。

关于Android - 使用 PackageInstaller 和 PackageInstaller.Session 静默安装 APK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51562940/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com