android 7.0行为变更中系统权限的更改里面提到:
传递软件包网域外的 file://
URI 可能给接收器留下无法访问的路径。因此,尝试传递 file://
URI 会触发 FileUriExposedException
。分享私有文件内容的推荐方法是使用 FileProvider
。
所以我们在安装apk的时候不能全部使用setDataAndType了,在7.0之后的系统要使用FileProvider
针对8.0权限更改针对位置应用访问权限
<!-- 安装未知应用来源的权限 --> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
private void installApk(File apkFile){ Log.d(TAG, "installApk: 安装应用程序"); if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) {//判读版本是否在7.0以上 Uri apkUri = FileProvider.getUriForFile(context, "com.iflytek.ringvideo.smallraindrop.fileprovider", apkFile); Intent install = new Intent(Intent.ACTION_VIEW); install.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); install.setDataAndType(apkUri, "application/vnd.android.package-archive"); context.startActivity(install); } else{ Intent install = new Intent(Intent.ACTION_VIEW); install.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(install); } }