热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidN7.0中报错:android.os.FileUriExposedException的解决方法

这篇文章主要给大家介绍了关于在AndroidN7.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中添加如下代码


  

注意:

  • authorities:app的包名.fileProvider
  • grantUriPermissions:必须是true,表示授予 URI 临时访问权限
  • exported:必须是false
  • resource:中的@xml/file_paths是我们接下来要添加的文件

2、在res目录下新建一个xml文件夹,并且新建一个file_paths的xml文件(如下图)

3、打开file_paths.xml文件添加如下内容

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  
  • 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直接是应用的包名

参考地址

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


推荐阅读
  • 本文介绍了如何通过自定义View中的declare-styleable属性创建枚举类型,并在代码中访问这些枚举值的方法。 ... [详细]
  • 使用MonkeyTalk实现Android自动化测试的Agent配置
    本文详细介绍了在MonkeyTalk框架下设置Android Agent的具体步骤,包括如何将Android项目转换为AspectJ项目,以及如何正确配置和集成MonkeyTalk的Agent库。 ... [详细]
  • 如何在Android项目中使用Framework.jar或其他系统Jar包
    本文介绍了一种方法,通过创建自定义库目录来集成系统的Jar包,以避免方法数限制,并确保项目的顺利编译。首先,需要在项目的src同级目录下创建一个专门用于存放系统Jar包的目录。 ... [详细]
  • 本文介绍如何通过自定义控件LoadLayout实现ListView的上拉加载更多和下拉刷新功能。LoadLayout支持上拉加载,而下拉刷新则利用了android.support.v4.widget.SwipeRefreshLayout组件。 ... [详细]
  • Android 手机安全应用首屏布局设计
    本文详细介绍了如何构建一个功能丰富的手机安全应用的首个导航界面布局。通过实例代码和效果展示,帮助开发者快速理解和实现相关功能。 ... [详细]
  • 本文介绍了Android中常见的动画类型及其应用场景,通过具体的代码示例展示了如何在Activity跳转时添加平滑过渡效果,提升用户体验。 ... [详细]
  • 解决fetch上传图片至微信公众号H5页面的问题
    在近期的一个项目需求中,需要在微信公众号内嵌入H5页面,并实现用户通过该页面上传图片的功能,包括拍摄新照片或从已有相册中选择。前端开发中采用了fetch API进行接口调用,但遇到了上传图片时数据无法正确传递的问题。 ... [详细]
  • Python作为一种广泛使用的高级编程语言,以其简洁的语法、强大的功能和丰富的库支持著称。本文将详细介绍Python的主要特点及其在现代软件开发中的应用。 ... [详细]
  • 本文详细介绍了如何手动编写兼容IE的Ajax函数,以及探讨了跨域请求的实现方法和原理,包括JSONP和服务器端设置HTTP头部等技术。 ... [详细]
  • 每位开发者都应该拥有一个展示自我技能与分享知识的空间——个人技术博客。本文将指导你如何使用静态网站生成器Hexo结合GitHub Pages搭建这样一个平台。 ... [详细]
  • APP数据包捕获挑战
    本文探讨了在使用Burp Suite捕获移动应用数据包时遇到的两大难题,尤其是SSL Pinning安全机制的影响,并提供了一种解决方案。 ... [详细]
  • 本文将详细介绍如何使用ViewPager实现多页面滑动切换,并探讨如何去掉其默认的左右切换动画效果。ViewPager是Android开发中常用的组件之一,用于实现屏幕间的内容切换。 ... [详细]
  • 本文详细介绍了在Hive中创建表的基本语法,包括临时表、外部表的创建方法,以及如何设置表的各种属性和约束条件。 ... [详细]
  • 解析SAP MM中采购申请单据项的Closed标志
    本文将详细介绍SAP MM模块中采购申请单据项内的Closed标志的具体含义及其操作方法,帮助读者更好地理解和运用这一功能。 ... [详细]
  • mysql 分库分表策略_【数据库】分库分表策略
    关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多, ... [详细]
author-avatar
炙天痕_953
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有