【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )_韩曙亮的博客-程序员资料_android 存储空间权限

技术标签: 文件  Android 文件管理  分区存储  Android  





一、存储空间分类



Android 9 9 9( API 级别 28 28 28 ) 及以下版本中 , Android 文件存储空间分为两类 ,

  • 内部存储空间
  • 外部存储空间

内部存储空间的可靠性高于外部存储空间 ;


Android 10 10 10( API 级别 29 29 29 ) 及以上版本中 , 应用只能访问应用的 专属存储空间 和 共享存储 中的文件 , 不能方位外置存储空间的其它文件了 ;

专属存储空间指的是 应用内部存储空间 和 外置存储中分配给应用的专属目录 ;

应用内部存储空间 放置保密性较高 , 体积较小的文件 ;

共享存储 指的是本应用与其它应用共享的存储空间 , 包括媒体 , 文档 , 下载 等目录 ;





二、存储空间访问权限



内部存储空间访问不需要权限 ;

Android 9 9 9( API 级别 28 28 28 ) 及以下版本中 访问外部存储需要使用 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限 ;

Android 10 10 10( API 级别 29 29 29 ) 及以上版本中 , 只能方位特定的目录 , 如应用专属目录 , 公共目录 , 不需要权限 , 其它外置存储空间的目录 , 无法访问 ;





三、分区存储



Android 9 9 9( API 级别 28 28 28 ) 及以下版本中 , 开发者可以任意在外置存储目录中创建文件 , 进行任何读写操作 , 并不会很规范的管理外置存储目录中的文件 , 卸载后 , 还遗留大量垃圾文件在外置存储空间中 ;
( 说的就是我 o( ̄︶ ̄)o ) ;


在 Android 10 中开始引入分区存储 , 以后外置的存储空间不能随便乱用了 , 在外置存储空间中写入文件 , 卸载后系统会帮你删除相关文件 ;


关于分区存储 :

  • 目标平台为 Android 9 9 9( API 级别 28 28 28 ) 及以下版本 , 不会启用分区存储 ;

  • 目标平台为 Android 10 10 10( API 级别 29 29 29 ) 及以上版本 , 会自动开启分区存储 , 这时候需要进行兼容开发 ;

一旦启用了分区存储 , 就无法访问 SD 卡中创建的目录或文件 , 只能访问外部存储空间的应用专属目录 和 公共目录 ;

目标平台指的是在 Android 工程中 Module 下的 build.gradle 中配置的 targetSdkVersion 参数 ;


本博客中暂时不引入分区存储 ;





四、相关文档资料



Android 文件处理参考文档 :

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/han1202012/article/details/114633515

智能推荐

如何保存token-localStorage存储_大浪淘沙胡的博客-程序员资料_localstorage存储token

1、原理原理是通过vue-router的beforeEach钩子,在每次路由到一个地址的时候先判断该路由是否携带了meta信息,且该信息中的requireAuth是否为true,如果为true表示该路由是需要身份验证的。则去localStorage找token,若token不存在则表示用户无认证,去登录请求token。若token存在则拿着token去请求。2、token保存login.vu...

python爬虫实战(九) B站热门视频信息爬取(复杂版)| scrapy+selenium组合爬取_皖渝的博客-程序员资料

目录一、scrapy基本介绍二、爬虫分析三、各部分代码一、scrapy基本介绍二、爬虫分析三、各部分代码

flutter小记(3)_qq_44592406的博客-程序员资料

RangeError (index): Invalid value: Valid value range is empty: 0用data.isNotEmpty或者isEmpty改正

IntelliJ IDEA 2017.2.2 永久破解方法_请叫我大虾的博客-程序员资料

转载自: https://blog.csdn.net/qq_37074004/article/details/85618788第一步:下载破解文件JetbrainsCrack-2.6.10-release-enc.jar下载链接:https://pan.baidu.com/s/1k-iCIXZtg057yN3sMBkJVw 提取码:pr0u下载完成后,进入到In...

z-stac配置按键_luke.woo的博客-程序员资料

按键的定义一般有两种,开关和摇杆。这里只讨论开关的定义。根据硬件在hal_board_cfg.h中定义在hal_key.h中定义宏位在hal_key.c中需要初始化相关寄存器附录:hal_board_cfg.h/************************************************************************************************** Filename: hal_board_cfg.h Revi

机器学习笔记(七):SVM_xiaoxy97的博客-程序员资料

一、前导1、最优化问题最优化问题一般是指对于某一个函数而言,求解在其指定作用域上的全局最小值问题,一般分为以下三种情况(备注:以下几种方式求出来的解都有可能是局部极小值,只有当函数是凸函数的时候,才可以得到全局最小值):①无约束问题:求解方式一般求解方式梯度下降法、牛顿法、坐标轴下降法等;②等式约束条件:求解方式一般为拉格朗日乘子法拉格朗日乘子法求解③不等式约...

随便推点

完成端口教程_茶向的博客-程序员资料

http://wenku.baidu.com/view/6197a98ecc22bcd126ff0c7b.htmlhttp://wenku.baidu.com/view/9743f92758fb770bf78a5515.html高伸缩性的应用的一个原则:1.      创建更少的线程消耗的资源少,每个线程会存储用户栈,线程上下文,内核栈等信息。线程多占用cpu的调度,线程多会造

ES6学习笔记——默认函数,箭头函数,剩余函数_一个程序媛。的博客-程序员资料

1.默认函数例1:结果:welcome代码解释:当a,b没有传值的时候,默认a='欢迎',b='mmr',当参数传的值是' ',也是传了值的。例2:结果:0 0代码解释:{x=0,y=0}={} 解构赋值的结果 0 0 作为函数的参数2. 函数参数默认已经定义了,不能再用let const 再定义例3:如下代码会报错3.扩展运算符,剩余运算符(即...)例4:结果:代码解释: ...意思是将...

axure8屏幕滚动_Axure9原型教程:Axure实现滚动效果(小技巧:隐藏滚动条)_安心小鱼的博客-程序员资料

axure推出axure 9 正式版本 ,支持黑暗模式,完美契合国内晚上加班的产品同学们,哈哈哈!!!不过目前感觉很多同学都是在用8,所以这次我以8为例,给大家演示一下如果做屏幕上下滚动的原型。其实8和9相差不大,道理是相通的,大家仔细琢磨一下就可以了,还是不了解的,私我私我私我~支持web端、APP、小程序设计,很奈斯下面进入正题:1.例如:首先我们创建一个APP或模板(这里是为了好看哈哈哈),...

Redis进击(二)搭建Redis主从复制服务集群(一主两从、反客为主)【Windows环境】_有时有味的博客-程序员资料

楔子:某个时间,由于不清不楚的某些原因,导致了一次严重的线上事故。后来,开发不清不楚的配合把项目升级到了 Redis高可用集群的哨兵模式(Redis-Sentinel),再后来,我们逐渐的又不清不楚的淡忘了这件事。节点化的工作很容易导致一定程度上只知其然而不知其所以然,这是项目开发中的一个众相。回想起来,我还是想记点什么。该篇可以为以下应用场景提供解决方案:读写分离场景:其中主节点以...

matplotlib-绘制精美的图表_weixin_34088583的博客-程序员资料

为什么80%的码农都做不了架构师?>>> ...

Termux 高级终端安装使用配置教程_weixin_30502965的博客-程序员资料

参考https://www.sqlsec.com/2018/05/termux.html简介Termux是一个Android下一个高级的终端模拟器,开源且不需要root,支持apt管理软件包,十分方便安装软件包,完美支持Python,PHP,Ruby,Go,Nodejs,MySQL等。随着智能设备的普及和性能的不断提升,如今的手机、平板等的硬件标准已达到了初级桌面计算机...

推荐文章

热门文章

相关标签