解决 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相关推荐

  1. 一种解决Android studio 3.0 Build报错的方法

    一种解决Android studio 3.0 Build报错的方法 参考文章: (1)一种解决Android studio 3.0 Build报错的方法 (2)https://www.cnblogs. ...

  2. Android已申请动态权限报错,Android 读取或者写入U盘时,报错:Permission denied

    ** 以下所有操作的前提是: android 系统已经root ** 最近在将文件拷贝到U盘时总是 写入失败(Permission denied) 程序清单中已经加入了权限 并且动态申请了权限 pri ...

  3. wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法

    内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...

  4. wince6.0 编译报错:error C2220: warning treated as error - no 'object' file generated的解决办法...

    内容提要:wince6.0编译报错:"error C2220: warning treated as error - no 'object' file generated" 原因是 ...

  5. 01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题

    01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题 参考文章: (1)01-路由跳转 安装less this.$router.re ...

  6. 未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法

    未能加载文件或程序集 Newtonsoft.Json, Version=4.5.0.0 的报错,解决方法 参考文章: (1)未能加载文件或程序集 Newtonsoft.Json, Version=4. ...

  7. 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 ...

  8. android override报错,android @override 报错解决方案

    android @override 报错解决方案 现象: ... java: 1801: method does not override a method from its superclass @ ...

  9. 运行安卓程序报错android.view.InflateException: Binary XML file line #11: Error inflating class ImageView

    运行安卓程序报错android.view.InflateException: Binary XML file line #11: Error inflating class ImageView 先上代 ...

最新文章

  1. 听完411头猪的哼哼,他们找到了理解“猪语”的算法 | Scientific Reports
  2. spark sql 本地调试_干货 | 如何成为大数据Spark高手
  3. java正则表示过滤汉字,Java正则表达式过滤汉字
  4. Docker入门 - 005 Docker 容器连接
  5. PAT L1-048 矩阵A乘以B
  6. SAP License:烟草行业ERP选型
  7. LeetCode(1103)——分糖果 II(JavaScript)
  8. mock.js 在html中使用demo示例代码
  9. Oracle virtual box 安装系统黑屏问题
  10. 网页布局02 盒子模型
  11. HFSS19 官方中文教程系列 L04
  12. 《Introduction To Modern Cryptography》读书笔记一
  13. 基于单片机的智能药盒设计
  14. 服务器系列和酷睿系列,至强cpu与酷睿两个系列之间有什么区别?
  15. ppt模板怎样用到html中,PPT模板怎么设置(ppt模板怎么竖版)
  16. L1, L2以及smooth L1 loss
  17. COBOL中的基本语法(转)
  18. 2017河南工业大学玲珑杯赛后总结
  19. PKU红的HSB值,以及THU紫的HSB值。北大红,清华紫
  20. linux怎么移植安卓rom,【经验技巧】任意手机移植ROM 教程,超详细ROM 技术详细......

热门文章

  1. 看电视剧《天道》一点感想 + 法兰克福美景Opencv聚类分析
  2. 苹果手机!!!全民K歌如何下载发布的歌曲
  3. 圣盈信金服集团公布2018年上半年未经审计财务业绩
  4. C语言实现模拟大乐透和双色球彩票机选【纯娱乐】
  5. 马中赤兔——诺基亚Lumia 920
  6. csv是什么意思中文_CSV是什么-名词解释
  7. 利用C#脚本来处理Excel
  8. IBM CEO彭明盛年薪上涨11%达2090万美元
  9. 高级计算机职称论文自述,教师评职称自述
  10. Altera FPGA SoC搭建步骤