在 SDK 26 中从本地存储安装 APK 时出现问题

Problems installing APK from local storage in SDK 26

我有一个应用程序更新方法,在 sdk 版本 26 之前都可以正常工作。

在 26 中,它打开 Activity 然后立即再次关闭它,没有任何(明显的)异常或警告被抛出。

我没有看到任何关于新权限或任何必要内容的文档。如果我只是将 minSdkVersion 更改为 25,它又可以正常工作了。

很想知道 26 有什么变化以及如何解决它。

这是相关的代码段,但正如我所说,它不是 "broken" - 它只是在 26 中默默地失败了。

if (Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.M) {
    Log.d(TAG, "Marshmallow or lower");
    intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
}
//if version 24 or above
else {
    Log.d(TAG, "higher than Marshmallow");

    Uri uri = FileProvider.getUriForFile(mContext, mContext.getApplicationContext().getPackageName() + ".provider", file);
    intent.setDataAndType(uri, "application/vnd.android.package-archive");
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
mContext.startActivity(intent);

您是否尝试将以下权限添加到清单中?

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

AndroidOreo 进行了更改,使从 Playstore 外部安装应用程序更加安全。您可以在下面 link:

获得更多信息

https://android-developers.googleblog.com/2017/08/making-it-safer-to-get-apps-on-android-o.html