android7.1获取存储权限,Android外部存储

原标题:Android外部存储

作者:庄灿杰,腾讯移动客户端开发 工程师

商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。

原文链接:http://wetest.qq.com/lab/view/368.html

WeTest 导读

外部存储作为开发中经常接触的一个重要系统组成,在Android历代版本中,有过许许多多重要的变更。我也曾疑惑过,为什么一个简简单单外部存储,会存在存在这么多奇奇怪怪的路径:/sdcard、/mnt/sdacrd、/storage/extSdCard、/mnt/shell/emulated/0、/storage/emulated/0、/mnt/shell/runtime/default/emulated/0…其实,这背后代表了一项项技术的成熟与发布:模拟外部存储、多用户、运行时权限…

一、各版本外部存储特性

1、Android 4.0

● 支持模拟外部存储(通过FUSE实现)

● 出现了主外部存储,以及二级外部存储(没有接口对外暴露)

● 支持MTP(Media Transfer Protocol)、PTP协议(Picture Transfer Protocol)

2、Android 4.1

● 开发者选项出现”强制应用声明读权限才可以进行读操作”的开关

3、Android 4.2

● 支持多用户,每个用户拥有独立的外部存储

4、Android 4.4

● 读操作需要声明READ_EXTERNAL_STORAGE权限

● 应用读写在外部存储的应用目录(/sdcard/Android//)不需要声明权限

● 增加了Context.getExternalFilesDirs() 接口,可以获取应用在主外部存储和其他二级外部存储下的files路径

● 引入存储访问框架(SAF,Storage Access Framework)

2f32c23a55d7db2707803611872a745d.png

5、Android 6.0

● 外部存储支持动态权限管理

● Adoptable Storage特性

6、Android 7.0

● 引入作用域目录访问

da48b4e478cabfde5a8c4021a418c0d9.png

补充一个点:

如果应用的minSdkVersion和targetSdkVersion设置成<=3,系统会默认授予READ_EXTERNAL_STORAGE权限。

二、部分特性讲解

1.模拟外部存储

a. 必要性

● FAT32 属于微软专利,可能存在许可和法律问题(相关文章);

● 可以定制Android自己的外部存储访问规则;

● 为多用户做铺垫;

b. 实现原理

系统/system/bin/sdcard守护进程,使用FUSE实现类FAT格式SD卡文件系统的模拟,也就是我们经常说的内置SD卡。(详细代码可以参考:/xref/system/core/sdcard/sdcard.c)

用户空间文件系统(Filesystem in

Userspace,简称FUSE)是一个面向类Unix计算机操作系统的软件接口,它使无特权的用户能够无需编辑内核代码而创建自己的文件系统

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值