报错为:
android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.xxx.xxx/cache/app/app.apk exposed beyond app through Intent.getData()at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)...at com.skyrin.bingo.update.AppUpdate.installApk(AppUpdate.java:295)
报错原因:
Android 7.0 以上不支持 file://协议 需要通过 FileProvider 访问 sd卡 下面的文件,所以 Uri 需要通过 FileProvider 构造,协议为 content://
修改点:
1. manifest添加
android:name="android.support.v4.content.FileProvider"
android:authorities="com.xxx.xxx.file_provider"
android:grantUriPermissions="true"
android:exported="false">
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
2. xml/添加文件
3. 使用
Uri uri;
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N) {
// content:// 协议
uri = FileProvider.getUriForFile(mContext,"com.xx.xxx.file_provider", file);
//Granting Temporary Permissions to a URI
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}else{
// file:// 协议
uri = Uri.fromFile(file);
}
网友评论