android7.0以后,使用Uri.fromFile会报FileUriExposedException异常,这是因为android7.0以后执行了更加严格的文件管理,要解决这一错误需要使用7.0新添加的FileProvide类,

FileProvider使用步骤:

1、注册一个FileProvider

在manifest里面定义一个FileProvider:

...

...

...

...

name直接使用系统的android.support.v4.content.FileProvider,如果需要自己继承FileProvider,则在这里写自己的FileProvider,一定要写全名,即:包名+类名。exported设置为false,即FileProvider不需要共享,grantUriPermissions设置为true,即允许获取临时读取uri的权限。

2、指定可用文件

在res资源文件夹下建立xml文件夹,在xml文件夹下创建一名为file_paths的资源文件:

paths元素必须包含以下一个或者多个子元素:

files-path 对应目录Context.getFilesDir()

cache-path 对应目录Context.getCacheDir()

external-path 对应目录Environment.getExternalStorageDirectory()

external-files-path 对应目录Context,getExternalFilesDir(String) 或者Context.getExternalFilesDir(null)

external-cache-path 对应目录Context.getExternalCacheDir()。

这一点要谨记,在后面创建文件时会用到。

name 是分享的文件路径的一部分,它会覆盖要分享的真实的路径,即path指定的路径。 后续生成 content:// URI 时,会使用这个别名代替真实目录名。这样做的目的,很显然是为了提高安全性

path 属性用于指定当前子元素所代表目录下需要共享的子目录名称。注意:path 属性值不能使用具体的独立文件名,只能是目录名。

意味着路径下的全部文件

然后在第一步的provider中引用这个资源文件:

3、生成Uri

首先创建文件:

File fiil = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+“/kgh/res”);

接下来,生成Uri:

Uri contentUri = FileProvider.getUriForFile(getContext(), "com.kgh.test.fileprovider", fiil);

getUriForFile方法中的第二个参数要与第一步中在manifest文件里面创建的provider里面的android:authorities名称一样

在file-path中使用name为beta_external_files_path ;

正常路径:/storage/emulated/0/kgh/res/c.apk

uri路径:content://com.kgh.test.fileprovider/beta_external_files_path/c.apk

显然路径被name覆盖了 增强了安全性

android7.0uri,android7.0 通过FileProvider获取uri相关推荐

  1. android7.0 通过FileProvider获取uri

    android7.0以后,使用Uri.fromFile会报FileUriExposedException异常,这是因为android7.0以后执行了更加严格的文件管理,要解决这一错误需要使用7.0新添 ...

  2. android 调用相机并获取图片地址,Android 7.0使用FileProvider获取相机拍照的图片路径...

    这里主要是基于Android 7.0,Nougat 实现一个获取相机拍照的图片后,使用FileProvider把图片转换为实际的路径. 首先需要在AndroidManifest.xml声明调用相机的权 ...

  3. (Android7.0)Android获取PID、TID、UID

    注:文章可能完全摘录,参考或完全自创,如有摘录或参考,会在文章最下面备注参考资料的地址(而不一定是原始文章的地址).如有版权问题,请及时告知. 文章目的在于整理分享本人学到的知识,可能会有错误或表达不 ...

  4. android调用相机与相册的方法,手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.0之后获取URI(兼容多版本)...

    Android中调用系统相机来拍摄照片的代码,以下:html 一.首先设置Uri获取判断以及相机请求Codejava public final int TYPE_TAKE_PHOTO = 1;//Ur ...

  5. Android 7.0 适配 FileProvider相机 相册 裁剪的使用

    Android7.0又加了一些新的东西,例如多窗口 通知栏发消息 等等,但是这些是一些功能的改变,可以说是很炫的进步,而我要说的是FileProvider这个杀千刀的Api,先来看一下官方解释: 上面 ...

  6. android uri获取参数,android-无法从深度链接获取Uri数据

    我想从浏览器重定向到我的应用程序,因此我在清单中为我的活动使用以下代码: android:host="book" /> //接受以" fivos:// book&q ...

  7. android 获取uri的正确文件路径的办法

    有时会从其他的文件浏览器获取路径,这时根据路径去数据库取文件时会发现不成功,原因是由于android的文件浏览器太多,各自返回的路径不统一,而android本身的数据库中的路径是绝对路径,即" ...

  8. android系统通过图片绝对路径获取URI的三种方法

    老马的技术博客 android系统通过图片绝对路径获取URI的三种方法 最近做项目要通过图片的绝对路径找到图片的URI,然后删除图片,小小总结一下获取URI的方法,亲自试验在 android 4.1. ...

  9. android+6.0+通讯录,Android6.0的通讯录获取

    在Android Studio上实现基于Android6.0的通讯录获取功能 1.新建一个Android项目,API选择23: Android6.0(Marshmallow) 2.在MainActiv ...

最新文章

  1. XHProf的安装和使用(PHP性能测试神器)
  2. 微信小程序界面跳转(2)——按钮
  3. flask html新增,如何在script里修改flask传入html的变量?
  4. 为什么不用ZK来做服务发现?
  5. oracle 窗口函数 (keep)
  6. render_template 网页模板
  7. 谷歌中巨大的 SEO 骗局!排名靠前的 HTML 编辑器也不可信
  8. dotnetNuke module development steps, dnn 模块开发步骤
  9. 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
  10. 解读《美国国家BIM标准》 – BIM能力成熟度模型(十二)
  11. HTML页面调用打印机打印pdf文件
  12. Invalid bound statement (not found): com.zheng.mapper.UserMapper.login
  13. 生命是一个苦旅,我们都在路上
  14. 语音信号的时域处理(二)
  15. 直播预告 | 双十一电商风控怎么破,看这场直播就对了!
  16. 开发手札:Unity与Android交互(Unity2019+)
  17. 石油公路工程都在用的光纤测试仪是什么型号
  18. 飞思卡尔微控制与MSCAN ----自学笔记
  19. 分享154个ASP源码,总有一款适合您
  20. 最大熵模型及GIS算法

热门文章

  1. Zadig 视频教程:如何在 5 分钟内快速安装 Zadig 系统
  2. VMware14 虚拟机装win10 系统出现 BootManager
  3. Charles本地映射 修改返回 Map Local setting
  4. 前端开发工具less入门
  5. 浏览器无法自动播放音乐的设置
  6. 详解《青岛市城市规划建设管理实施意见》之智慧城市系列
  7. 质量管理八大原则深度解析,必看好文
  8. 怎么批量给PDF加水印?
  9. 阿里巴巴获得商品详情 API调用示例
  10. Maven3.8.3下载