android - 以编程方式安装 .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"
弹出窗口。
如果发生这种情况,或者用户在弹出窗口中按“确定”,我们是否可以在我们的应用程序中获得任何回调,我很感兴趣。例如,我在这里找到了一个回调,它检查包是否存在(意味着它已安装)但我对更新更感兴趣,在这种情况下,我已经知道该应用程序以前已安装。
是否有startActivityForResults
针对此特定意图的回调(可能),所以我们知道它是成功安装还是失败?
解决方案
ACTION_VIEW
并非旨在返回结果。在 Android 5.0 及更高版本上,PackageInstaller
为您提供了用于安装应用程序的直接 API,您可以在其中提供回调(以 an 的形式IntentSender
)以了解安装如何进行。
这个示例项目展示了使用 的基础知识PackageInstaller
,您应该能够找到以更复杂的方式使用它的开源应用程序。例如,F-Droid 客户端可能使用PackageInstaller
.
推荐阅读
- javascript - ng-bootstrap 日期格式从零开始
- php - 使用 Google Drive 的服务器到服务器应用程序不响应 API 调用
- java - 如何将一个 @Test 方法中生成的数据访问到另一个测试方法但在不同的类中
- sql - SQL 语句问题(不在)
- java - 在Textview中显示中文文本的问题
- android - 将 CSV 文件导入 SQLite
- node.js - 使用 Quorum 网络中的 webjs 将签名的交易从 nodejs 发送到私有 SmartContract 不起作用
- c# - 当我在 SQL Server Management Studio 中修改表值函数时,为什么它工作得更快?
- java - 我的网络视图不工作。找不到符号?
- php - 我想用ajax在文本框中显示id