以编程方式安装 .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 的回调的主要内容,如果未能解决你的问题,请参考以下文章