【问题标题】:How to get the result of installation intent?如何获得安装意图的结果?
【发布时间】:2018-06-20 19:28:18
【问题描述】:

在我的应用程序中,我从服务器下载了一个 apk 并将其保存在设备上。此 apk 用于更新应用程序。如果下载完成,系统会提示用户使用以下代码进行下载:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Uri apkUri = FileProvider.getUriForFile(getApplicationContext(), BuildConfig.APPLICATION_ID + ".provider", updateAPK);
    Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
    intent.setData(apkUri);
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    startActivity(intent);

} else {
    Uri apkUri = Uri.fromFile(updateAPK);
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

这是应该的,但我的问题是:是否有可能获得意图的结果,所以我可以检查用户是否取消了安装?

【问题讨论】:

    标签: android android-intent installation apk


    【解决方案1】:

    将您的场景分为三个场景,而不是两个。

    在 API 级别 14 之前的设备上,使用 ACTION_VIEWfile Uri。请注意,您不需要 FLAG_ACTIVITY_NEW_TASK — 或者更准确地说,您应该在所有三种情况下都使用它或不使用它。

    在 API 级别 14-23 的设备上,使用 ACTION_INSTALL_PACKAGEfile UriSet EXTRA_RETURN_RESULTtrue,并使用 startActivityForResult()

    在 API 级别 24+ 的设备上,使用 ACTION_INSTALL_PACKAGEcontent Uri,就像你正在做的那样。 Set EXTRA_RETURN_RESULTtrue,并使用 startActivityForResult()

    在后两种情况下,onActivityResult() 将报告用户是否安装了应用程序 (RESULT_OK)。

    【讨论】:

    • 好的,谢谢你的解释。我已经阅读了有关此问题的各种内容,但对我来说,这些似乎都不是很清楚。如果我得到它的工作,我会试一试并将你的答案标记为正确。
    • @Bautzi89:我没有提到你只能在 API Level 14+ 上查看用户是否安装,你可以使用EXTRA_RETURN_RESULT。此外,IIRC、FLAG_ACTIVITY_NEW_TASKstartActivityForResult() 不兼容。
    • 这是正确的,但无论如何该应用程序都是针对更高版本的 SDK 的。当用户取消更新(这是我想要的 - 所以我将您的答案标记为正确)时,我确实收到了一个结果,但是当我不使用 FLAG_ACTIVITY_NEW_TASK 时,应用程序更新,但随后关闭而没有重新打开它的选项。所以这是我将尝试弄清楚的下一个主题......
    • @Bautzi89,你有没有找到在不使用 FLAG_ACTIVITY_NEW_TASK 时显示对话框的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2015-05-16
    • 2012-04-02
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多