Android7.0及以上android.os.FileUriExposedException,解析安装包出现异常
2018-01-10 19:54
621 查看
解决问题:
1、Android N(Android7.0)及以上访问文件时FileUriExposedException异常,
android.os.FileUriExposedException file:///storage/emulated/0/xxx
2、Android N及以上安装apk文件时,出现解析安装包出现异常。
出现问题原因:
随着安卓版本升级,谷歌越来越收紧了相关权限,如Android6.0引入动态权限控制(Runtime Permissions),Android7.0引入私有目录被限制访问和StrictMode API。按照Android N的要求,若要在应用间共享文件,您应发送一项content://URI,并授予 URI 临时访问权限。
而进行此授权的最简单方式是使用FileProvider类。
解决方法:
1、在mainfest中加入FileProvider注册
2、在res目录下新建一个xml文件夹,并新建一个filepaths的xml文件
File路径:
/storage/emulated/0/sxevcg/files/evcg.apk
content://URI格式:
content://com.lnint.sxev.fileprovider/external_storage_root/sxevc
4000
g/files/evcg.apk
3、访问文件/安装APK文件
1、Android N(Android7.0)及以上访问文件时FileUriExposedException异常,
android.os.FileUriExposedException file:///storage/emulated/0/xxx
2、Android N及以上安装apk文件时,出现解析安装包出现异常。
出现问题原因:
随着安卓版本升级,谷歌越来越收紧了相关权限,如Android6.0引入动态权限控制(Runtime Permissions),Android7.0引入私有目录被限制访问和StrictMode API。按照Android N的要求,若要在应用间共享文件,您应发送一项content://URI,并授予 URI 临时访问权限。
而进行此授权的最简单方式是使用FileProvider类。
解决方法:
1、在mainfest中加入FileProvider注册
</application> ...... <!--authorities="你的包名+fileprovider" --> <provider android:authorities="com.lnint.sxev.fileprovider" android:name="android.support.v4.content.FileProvider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths"/> </provider> </application>
2、在res目录下新建一个xml文件夹,并新建一个filepaths的xml文件
<?xml version="1.0" encoding="utf-8"?> <paths> <external-path path="Android/data/com.lnint.sxev/" name="files_root" /> <external-path path="." name="external_storage_root" /> </paths>
File路径:
/storage/emulated/0/sxevcg/files/evcg.apk
content://URI格式:
content://com.lnint.sxev.fileprovider/external_storage_root/sxevc
4000
g/files/evcg.apk
3、访问文件/安装APK文件
//安装apk private void installApk(Context mContext, String apkFilePath){ File apkfile = new File(apkFilePath); if (!apkfile.exists()) { return; } Intent install = new Intent(Intent.ACTION_VIEW); install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //添加这一句表示对目标应用临时授权该Uri所代表的文件 install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); install.setDataAndType(FileProviderUtils.getUriForFile(mContext, apkfile), "application/vnd.android.package-archive"); mContext.startActivity(install); }
public static Uri getUriForFile(Context context, File file) { if (context == null || file == null) { throw new NullPointerException(); } Uri uri = null; try { //Android7.0以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { uri = FileProvider.getUriForFile(context.getApplicationContext(), "com.lnint.sxev.fileprovider", file); } else { uri = Uri.fromFile(file); } }catch (Exception e) { e.printStackTrace(); } return uri; }
相关文章推荐
- ANDROID 7.0 上出现 android.os.FileUriExposedException 异常
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- Android 7.0 出现 ”FileUriExposedException“ 和 ”解析包出现错误“ 异常的解决办法
- Android7.0打开本地文件失败 android.os.FileUriExposedException
- 解决异常 android.os.FileUriExposedException
- Android7.0 android.os.FileUriExposedException
- Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式
- Android的SDK版本N以上报错:android.os.FileUriExposedException
- Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式
- 解决Android7.0相机 android.os.FileUriExposedException
- Android7.0解决 android.os.FileUriExposedException: file:///storage/emulated/0/
- 解决android.os.FileUriExposedException,exposed beyond app through ClipData.Item.getUri() 异常
- Android 3.0以上 访问WebService 出现 android.os.NetworkOnMainThreadException异常
- Android3.0版本以上出现android.os.NetworkOnMainThreadException异常与处理方式
- android 7.0读取文件报异常信息 - android.os.FileUriExposedException
- 解决 Android N 7.0 上 报错:android.os.FileUriExposedException
- android 2.2版本之后,访问WebService 出现 android.os.NetworkOnMainThreadException异常 处理办法
- 解决发http get请求的时候不成功,出现android.os.NetworkOnMainThreadException的异常
- 解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appN