Intent openIntent;
File file = new File(mApkPath);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
String auth = mContext.getPackageName() + ".file.provider";
Uri apkUri = FileProvider.getUriForFile(mContext, auth, file);
openIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
openIntent.setData(apkUri);
openIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
} else {
openIntent = new Intent(Intent.ACTION_VIEW);
openIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
openIntent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
return openIntent;
我发现这种方式可以打开一个意味着"安装成功的活动"在低SDK版本的Android设备中,但在高版本的SDK版本中,当安装完成后,即使安装了新的.apk,应用也会崩溃。
有办法打开意味着"安装成功"的活动,以便让用户可以选择安装'已完成'或者'打开'?
顺便说一句,我得到resultCode == RESULT_CANCELED
,实际上,安装了新的.apk。我注意到PackageInstaller可以用户更新apk,但是如何使用呢?我阅读了ApiDemos但result == PackageInstaller.STATUS_PENDING_USER_ACTION
获得int result = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, PackageInstaller.STATUS_FAILURE)
,但是.apk已经安装,没有任何'已完成'或者'打开'按钮。
谢谢!