Android 9未声明READ_EXTERNAL_STORAGE仍可访问PDF的原因咨询
问题解答
1. 下载文件夹的访问原理
在Android 9及更低版本中,如果你的应用是通过**系统文件选择器(比如ACTION_GET_CONTENT或ACTION_OPEN_DOCUMENT)**让用户主动选择下载文件夹里的PDF,那么完全不需要声明READ_EXTERNAL_STORAGE权限。这是因为这种场景下,是用户主动授权应用访问特定文件,系统会临时授予应用该文件的访问权限,而非全局的外部存储权限。
2. 第三方云存储应用的访问原理
Google Drive、OneDrive这类第三方云应用,它们的文件访问是基于Content Provider机制实现的:
- 当你通过Intent调用这些云应用选择文件时,用户在云应用内完成文件选择操作后,云应用会将对应文件的Uri返回给你的应用,同时系统会自动临时授予你的应用访问该Uri指向文件的权限。
- 这种访问和设备的外部存储权限无关,因为文件本身存储在第三方应用的沙箱或者云服务器中,不属于需要申请外部存储权限才能访问的本地外部存储范畴。
3. 特殊场景的可能性
如果你的应用是直接通过文件路径(而非Uri)访问下载文件夹的文件却无需权限,那大概率是以下两种情况:
- 你的应用是系统预装应用,系统应用默认拥有更高的存储访问权限,不需要显式声明权限。
- 设备厂商对系统做了定制修改,放宽了存储权限的校验规则(这属于厂商定制行为,不符合Android官方的权限规范)。
内容的提问来源于stack exchange,提问作者Marco Nicolas
相关产品推荐
相关产品推荐

