android 根目录uri,Android FileProvider 踩坑指北

本文介绍了从Android N开始,由于严格模式导致的FileUriExposedException问题,并提出使用FileProvider通过content://替代file://的解决方案。详细阐述了FileProvider的原理、使用场景以及配置步骤,包括Android应用的文件存储目录、如何转换file://为content://以及如何授予临时访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

从 Android N(7.0) 开始,将严格执行 StrictMode 模式。而从 Android N 开始,将不允许在 App 间,使用 file:// 的方式,传递一个 File ,否者会抛出 FileUriExposedException 的异常引发 Crash。解决方案就是通过FileProvider 用 content:// 代替 file://,需要开发者主动升级 targetSdkVersion 到 24 才会执行此策略。

其实在 Android 7.0 出来后我们应用就 就开始适配了,应用中加入了FileProvider,但偶尔还是会碰到 FileProvider 导致的问题,所以这边文章准备彻彻底底的分析下FileProvider,揪出FileProvider的庐山真面目。

Android 应用文件存储目录

内部存储空间中的应用私有目录

每安装一个 App 系统都会在内部存储空间的 data/data 目录下以应用包名为名字自动创建与之对应的文件夹,这个文件夹用于持久化 App 中的 WebView 缓存页面信息、SharedPreferences、SQLiteDatabase等应用相关数据。当用户卸载 App 时,系统自动删除 data/data 目录下对应包名的文件夹及其内容。

Android SDK 提供 获取并操作内部存储空间中的应用私有目录的方法如下:

context.getFilesDir()

context.getCacheDir()

context.deleteFile()

context.fileList()

Environment.getDataDirectory()

外部存储空间中的应用私有目录

考虑到普通用户无法访问应用的内部存储空间,比如用户想从应用里面保存一张图片,那么这张图片应该存储在外部存储空间,用户才能访问的到,外部存储空间路径为:/storage/emulated/0/Android/data/

默认情况下,系统并不会自动创建外部存储空间的应用私有目录。只有在应用需要的时候,开发人员通过 SDK 提供的 API 创建该目录文件夹和操作文件夹内容。

当用户卸载 App 时,系统也会自动删除外部存储空间下的对应 App 私有目录文件夹及其内容。

Android SDK 中提供给开发人员直接操作外部存储空间下的应用私有目录的方法如下:

context.getExternalFilesDir()

context.getExternalCacheDir()

Environment.getExternalStorageDirectory()

外部存储空间中的公共目录

外部存储空间中的公共目录用来存放当应用被卸载时,仍然可以保存在设备中的信息,如:拍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值