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

Callback for programatically install .apk

我使用本地下载的 .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" 弹出窗口。

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

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

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

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