Android系统中能否在SD卡根目录创建文件?创建失败疑问
Android SD卡根目录文件创建的权限说明
嘿,针对你的两个问题,我结合Android不同版本的权限规则给你详细梳理清楚:
- 能不能在Android系统的SD卡根目录创建文件?得看系统版本和应用权限情况;
- 你提到的
/storage/5DF1-1011/是外置SD卡的根目录,在较新的Android版本里,普通应用确实没法直接在这创建文件,只能在你说的应用专属目录/storage/5DF1-1011/Android/data/com.my.test.sdcardtest/里操作。
下面具体拆解不同系统版本的规则:
一、Android 9及更早的版本(API ≤28)
这个阶段权限限制没那么严格,只要你的应用在Manifest里声明了WRITE_EXTERNAL_STORAGE权限,并且用户授权了,就能直接在外置SD卡根目录创建、修改、删除文件。
权限声明代码如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
要注意哦,这是危险权限,不能只靠Manifest声明,得在代码里动态申请用户授权。
二、Android 10到Android 11(API 29-30)
从Android 10开始,系统默认启用了分区存储(Scoped Storage),这时候就算你申请了WRITE_EXTERNAL_STORAGE权限,普通应用也碰不了SD卡根目录或者其他应用的专属文件夹。
这时候你的应用只能访问两个区域:
- 自身的专属目录:就是你提到的
/storage/5DF1-1011/Android/data/com.my.test.sdcardtest/,这里的文件操作不用额外申请权限,系统默认放行; - 媒体文件(图片、视频、音频):可以通过MediaStore API来访问,但没法在根目录创建非媒体类型的文件。
如果实在要在根目录操作,你可以在Manifest里加android:requestLegacyExternalStorage="true"来暂时绕开规则,但这只是过渡方案,到Android 12就完全失效了。
三、Android 12及以上版本(API ≥31)
这个版本的分区存储规则更严格,之前的过渡方案直接作废。普通应用完全没法直接在SD卡根目录创建文件,只能使用自己的专属目录。
如果你的应用是类似文件管理器这种必须全局访问存储的类型,可以申请MANAGE_EXTERNAL_STORAGE权限,但这个权限得用户手动去系统设置里授权,而且Google Play对使用这个权限的应用审核特别严格,只有特定场景的应用才能通过审核。
针对你的情况总结
你现在没法在/storage/5DF1-1011/创建文件,大概率是因为应用运行在Android 10及以上的系统里,遵循分区存储规则。如果你的应用不需要访问根目录的文件,建议优先使用应用专属目录,既符合系统规范,也省了权限申请的麻烦。
内容的提问来源于stack exchange,提问作者Jan Málek
相关产品推荐
相关产品推荐

