解决 Android N 7.0 上 报错:android.os.FileUriExposedException
解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appName-2.3.0.apk exposed beyond app through Intent.getData()
解决方法
1、在AndroidManifest.xml中添加如下代码
<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="app的包名.fileProvider"android:grantUriPermissions="true"android:exported="false"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />
</provider>
注意:
authorities:app的包名.fileProvider
grantUriPermissions:必须是true,表示授予 URI 临时访问权限
exported:必须是false
resource:中的@xml/file_paths是我们接下来要添加的文件
2、在res目录下新建一个xml文件夹,并且新建一个file_paths的xml文件(如下图)
3、打开file_paths.xml文件添加如下内容
<?xml version="1.0" encoding="utf-8"?>
<paths><external-path path="Android/data/app的包名/" name="files_root" /><external-path path="." name="external_storage_root" />
</paths>
path:需要临时授权访问的路径(.代表所有路径)
name:就是你给这个访问路径起个名字
4、修改代码适配Android N
Intent intent = new Intent(Intent.ACTION_VIEW);
//判断是否是AndroidN以及更高的版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);Uri contentUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
startActivity(intent);
1、首先我们对Android N及以上做判断;
2、然后添加flags,表明我们要被授予什么样的临时权限
3、以前我们直接Uri.fromFile(apkFile)
构建出一个Uri,现在我们使用FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".fileProvider", apkFile);
4、BuildConfig.APPLICATION_ID
直接是应用的包名
参考地址
解决 Android N 7.0 上 报错:android.os.FileUriExposedException相关推荐
- 一种解决Android studio 3.0 Build报错的方法
一种解决Android studio 3.0 Build报错的方法 参考文章: (1)一种解决Android studio 3.0 Build报错的方法 (2)https://www.cnblogs. ...
- Android已申请动态权限报错,Android 读取或者写入U盘时,报错:Permission denied
** 以下所有操作的前提是: android 系统已经root ** 最近在将文件拷贝到U盘时总是 写入失败(Permission denied) 程序清单中已经加入了权限 并且动态申请了权限 pri ...
- wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法
内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...
- wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法...
内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...
- 01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题
01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题 参考文章: (1)01-路由跳转 安装less this.$router.re ...
- 未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法
未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法 参考文章: (1)未能加载文件或程序集 Newtonsoft.Json, Version=4. ...
- maven项目解决pom.xml头部 httpmaven.apache.orgxsdmaven-4.0.0.xsd报错的问题
这是文件内引入某个资源 pom.xml头部http://maven.apache.org/xsd/maven-4.0.0.xsd"报错. 后来发现是 Eclipse 配置的问题 1.找到ma ...
- android override报错,android @override 报错解决方案
android @override 报错解决方案 现象: ... java: 1801: method does not override a method from its superclass @ ...
- 运行安卓程序报错android.view.InflateException: Binary XML file line #11: Error inflating class ImageView
运行安卓程序报错android.view.InflateException: Binary XML file line #11: Error inflating class ImageView 先上代 ...
最新文章
- 听完411头猪的哼哼,他们找到了理解“猪语”的算法 | Scientific Reports
- spark sql 本地调试_干货 | 如何成为大数据Spark高手
- java正则表示过滤汉字,Java正则表达式过滤汉字
- Docker入门 - 005 Docker 容器连接
- PAT L1-048 矩阵A乘以B
- SAP License:烟草行业ERP选型
- LeetCode(1103)——分糖果 II(JavaScript)
- mock.js 在html中使用demo示例代码
- Oracle virtual box 安装系统黑屏问题
- 网页布局02 盒子模型
- HFSS19 官方中文教程系列 L04
- 《Introduction To Modern Cryptography》读书笔记一
- 基于单片机的智能药盒设计
- 服务器系列和酷睿系列,至强cpu与酷睿两个系列之间有什么区别?
- ppt模板怎样用到html中,PPT模板怎么设置(ppt模板怎么竖版)
- L1, L2以及smooth L1 loss
- COBOL中的基本语法(转)
- 2017河南工业大学玲珑杯赛后总结
- PKU红的HSB值,以及THU紫的HSB值。北大红,清华紫
- linux怎么移植安卓rom,【经验技巧】任意手机移植ROM 教程,超详细ROM 技术详细......