Android - 通过意图安装 APK - 对失败做出反应

Posted

技术标签:

【中文标题】Android - 通过意图安装 APK - 对失败做出反应【英文标题】:Android - Install APK via intent - react to failure 【发布时间】:2019-03-15 16:44:13 【问题描述】:

我正在通过以下意图安装 APK:

val apkUri = Uri.fromFile(apkFile)
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(apkUri, "application/vnd.android.package-archive")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)

我知道我可以检索 PACKAGE_ADDED 广播,然后在安装 APK 时做出反应。 但是,如果安装失败,我该如何应对?例如。如果 APK 没有正确解析(例如,如果它用于不同的架构),或者只是用户在请求上单击“CANCEL”?

我还尝试了startActivityForResult 和相应的onActivityForResult 函数,但这似乎与用户操作无关,并且在触发意图时立即触发。

【问题讨论】:

PACKAGE_ADDED 仅在实际安装时调用。取消下载没有广播。 我知道那个特定的广播只有在安装时才会触发。但必须有一种方法来处理失败。 如果以下答案回答了您的问题,请将其标记为已接受的答案。如果不是,请提供一些评论。 【参考方案1】:

答案是没有标准方式来做这件事。如果您查看source of the package manager service,您会看到没有成功广播的事件。

理论上你可以做一些事情......

    在触发该意图后,当活动/片段恢复时检查是否已安装包。 如果您有权限检查 logcat 日志并解析它们以获取任何包管理器输出。

这些选项并不完美,可能不适用于所有实现,但可能会引导您走向正确的方向。

【讨论】:

以上是关于Android - 通过意图安装 APK - 对失败做出反应的主要内容,如果未能解决你的问题,请参考以下文章

在Android 4.2+上使用intent安装apk时启用降级

从网站下载 apk 时无法通过意图启动电子邮件

APK安装(一)—— PMS原理分析

安卓Android软件安装包apk是啥文件格式

Android build in store 的行为与通过 USB 安装的 apk 不同

Android 通过意图播放视频