Android访问/storage目录需何权限?已获外部存储管理权限仍无法读取
问题解答
核心原因
/storage是系统的虚拟挂载容器目录,并非实际存储文件的分区目录,系统本身就限制了直接读取该目录的内容,哪怕你拥有外部存储管理器权限也无法突破这个限制。- 外部存储管理器权限(
MANAGE_EXTERNAL_STORAGE)的作用是允许你访问其他应用的私有目录、管理外部存储内的文件,但不包含直接读取/storage顶层目录的权限——因为这个目录本身没有实际文件,只是用来挂载各种存储卷(比如内部存储模拟的/storage/emulated/0、SD卡对应的/storage/XXXX)的容器。
正确的访问方式
不需要额外申请权限,只需调整访问逻辑:
- 用
StorageManager类的getStorageVolumes()方法获取设备上所有可用的存储卷,再通过StorageVolume的getDirectory()方法拿到对应存储卷的根目录,这样就能正常访问具体的存储分区内容。 - 避免直接硬编码
/storage这类路径,不同设备的存储挂载结构可能存在差异,依赖系统API能保证兼容性。
内容的提问来源于stack exchange,提问作者user1785730




