以编程方式安装 .apk 的回调

Posted

技术标签:

【中文标题】以编程方式安装 .apk 的回调【英文标题】:Callback for programatically install .apk 【发布时间】:2021-12-14 08:01:06 【问题描述】:

我使用本地下载的.apk 更新我的应用程序,通过DownloadManager 使用此代码:

val installIntent = Intent(Intent.ACTION_VIEW)
            installIntent.setDataAndType(localUri, "application/vnd.android.package-archive")
            installIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
            this.startActivity(installIntent) 

虽然大部分时间它都能正常工作,但有时,只有部分用户会收到"There was a problem parsing the package error" 弹出窗口。

如果发生这种情况,或者用户在弹出窗口中按“确定”,我们是否可以在我们的应用程序中获得任何回调,我很感兴趣。我找到了here for instance,这是一个检查包是否存在(意味着它已安装)的回调,但我对更新更感兴趣,在这种情况下,我已经知道该应用程序之前已安装。

是否有针对这个特定意图的回调(可能是startActivityForResults),所以我们知道它是安装成功还是失败?

【问题讨论】:

也许,您可以使用PackageInstaller,而不是使用ACTION_VIEW。 Here is a sample project 演示其用途。 @CommonsWare 它使用包安装程序工作。至少对于不成功的安装,成功通常会进入启动器主屏幕。如果你把你的评论变成回应,我会接受的。谢谢。 【参考方案1】:

ACTION_VIEW 并非旨在返回结果。在 Android 5.0 及更高版本上,PackageInstaller 为您提供了用于安装应用程序的直接 API,您可以在其中提供回调(以IntentSender 的形式)以了解安装过程。

This sample project 展示了使用PackageInstaller 的基础知识,您应该能够找到以更复杂的方式使用它的开源应用程序。例如,F-Droid 客户端可能使用PackageInstaller

【讨论】:

以上是关于以编程方式安装 .apk 的回调的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式回调按钮时发送到实例的无法识别的选择器

无法在 setTimeout 回调中以编程方式打开 Vuetify 对话框

Android以编程方式安装apk

在 android 上以编程方式安装 APK

Android:以编程方式安装.apk [重复]

Android:以编程方式将 apk 复制到 /system/app