在我的应用程序中,我从服务器下载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);
}
这是应该的,但我的问题是:是否有可能得到意图的结果,所以我可以检查用户是否取消了安装?
答案 0 :(得分:5)
将您的场景划分为三个场景,而不是两个场景。
在API级别14之前的设备上,将ACTION_VIEW
与file
Uri
一起使用。请注意,您不需要FLAG_ACTIVITY_NEW_TASK
- 或者更准确地说,您应该在使用它时保持一致,或者在所有三种情况下都不使用它。
在API级别为14-23的设备上,将ACTION_INSTALL_PACKAGE
与file
Uri
一起使用。 Set EXTRA_RETURN_RESULT
至true
,并使用startActivityForResult()
。
在API级别为24+的设备上,使用ACTION_INSTALL_PACKAGE
与content
Uri
一样,正如您所做的那样。 Set EXTRA_RETURN_RESULT
至true
,并使用startActivityForResult()
。
在后两种情况下,onActivityResult()
会报告用户是否安装了应用(RESULT_OK
)。