Android Studio中Environment.getExternalStorageDirectory废弃后如何在SD卡根目录创建文件
替代废弃的
Environment.getExternalStorageDirectory()实现公共存储根目录创建文件/文件夹方案 Android 10(API 29)开始引入分区存储机制,Android 11(API 30)强制生效,Environment.getExternalStorageDirectory()被废弃后,可根据业务场景选择以下两种实现方案:
一、优先方案:使用系统公共目录(无需特殊权限,全版本兼容)
如果你的文件属于可公开访问的通用类型(比如下载文件、图片、文档等),优先选择该方案,不需要申请特殊权限,也符合官方权限规范:
- 调用
Environment.getExternalStoragePublicDirectory(String type)获取对应公共目录路径,常用type参数如下:Environment.DIRECTORY_DOWNLOADS:对应系统Downloads下载目录Environment.DIRECTORY_PICTURES:对应系统Pictures图库目录Environment.DIRECTORY_DOCUMENTS:对应系统Documents文档目录
- 在获取到的公共目录下创建自定义的文件/文件夹即可,示例代码如下:
// 示例:在Downloads目录下创建应用专属的自定义文件夹 File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); File myAppDir = new File(downloadDir, "自定义文件夹名称"); if (!myAppDir.exists()) { // 创建文件夹 boolean createResult = myAppDir.mkdirs(); }
注意:该方法虽然在API 29及以上也被标记为废弃,但官方明确说明该方法返回的路径依然合法可读写,仅不建议在公共目录存放应用私有数据,公共类文件可以正常使用
二、必须在公共存储根目录(和WhatsApp、Android、Downloads同级目录)创建内容的方案
如果业务确实需要直接在根目录创建内容,需要根据Android版本申请对应权限:
1. Android 9及以下(API ≤28)
- 首先在
AndroidManifest.xml中声明存储权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 运行时动态申请以上两个权限,用户授权后即可直接操作根目录:
File rootDir = Environment.getExternalStorageDirectory(); File customRootFolder = new File(rootDir, "自定义根目录文件夹名称"); customRootFolder.mkdirs();
2. Android 10(API 29)
- 在
AndroidManifest.xml的application节点添加属性android:requestLegacyExternalStorage="true",申请使用旧版存储模型,后续操作和Android 9及以下一致即可。
3. Android 11及以上(API ≥30)
分区存储强制执行,需要申请所有文件访问权限:
- 第一步:在
AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
- 第二步:运行时引导用户跳转系统设置页授权:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (!Environment.isExternalStorageManager()) { Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); startActivity(intent); } }
- 用户授权后即可正常在公共存储根目录创建文件/文件夹。
注意:如果应用需要上架Google Play,需要向平台说明申请MANAGE_EXTERNAL_STORAGE权限的合理业务场景,不符合要求的应用会被驳回上架
内容的提问来源于stack exchange,提问作者SmartphonE_Codes
相关产品推荐
相关产品推荐

