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

时间:2018-01-11 12:51:15

标签: android android-intent install apk

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

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

1 个答案:

答案 0 :(得分:5)

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

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

在API级别为14-23的设备上,将ACTION_INSTALL_PACKAGEfile Uri一起使用。 Set EXTRA_RETURN_RESULTtrue,并使用startActivityForResult()

在API级别为24+的设备上,使用ACTION_INSTALL_PACKAGEcontent Uri一样,正如您所做的那样。 Set EXTRA_RETURN_RESULTtrue,并使用startActivityForResult()

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