您的位置:首页 > 移动开发 > Android开发

Android 6.0 和 7.0 储存空间适配小结

2017-09-28 11:44 363 查看

FileProvider 配置

FileProvider 所支持的几种 path 类型,权且记录一下,写 file_paths 的时候是不会自动提示的。

从 Android 官方文档上可以看出 FileProvider 提供以下几种 path 类型:

<files-path path=""name="camera_photos" />


该方式提供在应用的内部存储区的文件 / 子目录的文件。它对应 Context.getFilesDir 返回的路径:eg:”/data/data / 包名 / files”。

<cache-path name="name" path="path" />


该方式提供在应用的内部存储区的缓存子目录的文件。它对应 getCacheDir 返回的路径:eg:“/data/data / 包名 / cache”;

<external-path name="name" path="path" />


该方式提供在外部存储区域根目录下的文件。它对应 Environment.getExternalStorageDirectory 返回的路径:eg:”/storage/emulated/0”;

<external-files-path name="name" path="path" />


该方式提供在应用的外部存储区根目录的下的文件。它对应 Context#getExternalFilesDir(String) Context.getExternalFilesDir(null) 返回的路径。eg:”/storage/emulated/0/Android/data / 包名 / files”。

<external-cache-path name="name" path="path" />


该方式提供在应用的外部缓存区根目录的文件。它对应 Context.getExternalCacheDir() 返回的路径。eg:”/storage/emulated/0/Android/data / 包名 / cache”。

规避申请储存空间权限

程序包名下的 file 和 cache 目录在 SDK 19 + 是不需要储存空间权限的,并且 23 + 的动态获取权限也不需要申请。那么我们就不必将所有内容都放在公共 SD 卡上,避免使用储存空间时要求用户动态授权的一系列麻烦。

另外我尝试了将储存空间权限限制在 19 以下,发现这样并不可以,小米 MIUI8 上直接报无权限错误了。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>


在手机上储存内容的时候常见的是以下几种情况

缓存图片,临时数据 ——> 内部存储区的缓存子目录,防止被其他应用或用户访问

下载的更新安装包 ——> 外部缓存区根目录,需要交给安装程序访问进行安装

程序的运行日志,持久化储存的数据,插件包 ——> 内部存储区的文件子目录,防止被其他应用访问,并且不会因为系统控件不足而被清理。日志应上传后手动清理。

需要与特定程序交互的持久化数据 ——> 外部文件区子目录,这个需求也是比较少的,比如为家族产品定制的数据格式文件。

用户可访问的公开数据,照片,文档等 ——> 公共储存空间, SDK 23 + 必须申请授权访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 存储