如何获取安装意图的结果?

How to get the result of installation intent?

在我的应用程序中,我从服务器下载了一个 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);
}

这是正常工作的,但我的问题是:是否有可能获得意图的结果,以便我可以检查用户是否取消了安装?

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

在 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 UriSet EXTRA_RETURN_RESULTtrue,并使用 startActivityForResult().

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