Android存储系统概况
在api 28 29 30 31 33都进行测试过。
/是根目录
- /data/data/com.xxx.xxx/…
- 首先 /sdcard/、/storage/self/primary/ 真正指向的是/storage/emulated/0/,所以用x表示这三者。x/Android/data/com.xxx.xxx/…
- x/[DCIM, Alarm, Pictures]
- x下其他目录,比如 x/qq
1、2都是特定应用的,特点是路径有包名。这两个目录本App无需申请访问权限即可申请,其它App也无法访问本App的目录。
1称为 internal storage,2称为 external storage的应用专属目录。
3我称之为 external public storage。
4称之为其他目录
1、2不受分区存储影响。
4我不会。
在本文就研究对于3受分区存储的影响(表现在9以前,10,11以后这三个版本不同)
各个版本对于external public的不同反应
9 以下 | 10 | 11 以上 | |
---|---|---|---|
增 | 需要写权限 | 不需要权限 | 不需要权限 |
删 | 需要写权限。本应用和其他应用都可删 | 不需要权限,但只能删自己;删其他应用需要在弹出的Dialog确认 | 不需要权限,但只能删自己;删其他应用需要在弹出的Dialog确认 |
查 | 需要读权限。本应用和其他应用都可查 | 不需要权限,但只能查自己;有权限后,本应用和其他应用都可查 | 不需要权限,但只能查自己;有权限后,本应用和其他应用都可查 |
申请权限跑我那个函数就行。适配到Api33。
9以下好像在多少版本以前,是在Manifest声明READ,,,和WRITE就行,之后才是运行时请求。不想不区分这个,9以下就运行时请求就对了,有的话就直接通过了,不用区分。
我写了一套函数,用于操作 1 2 3 区域(目前只是Image,本文讲的都是 媒体文件,txt等文档需要用SAF,去下面官网链接看看),这些函数都是全版本适用的,向后(backward)兼容。
参考
评论