如何替代已废弃的Environment.getExternalStorageDirectory()获取原路径?
获取外部存储根目录的正确方式(替代废弃的
Environment.getExternalStorageDirectory()) Environment.getExternalStorageDirectory()被废弃的核心原因是Android 10(API 29)引入的分区存储机制——这个机制限制了应用对外部存储公共目录的直接访问,以此保护用户数据隐私。
如果你需要获取和原方法一致的/storage/emulated/0/路径,以下是具体实现方式:
1. Android 10+(API 29及以上)的处理
在Android 10及更高版本中,直接访问公共存储根目录需要申请MANAGE_EXTERNAL_STORAGE特殊权限(需用户手动在系统设置中授予),之后可以继续使用原方法获取路径:
if (Environment.isExternalStorageManager()) { // 权限已授予,可获取根目录 String rootPath = Environment.getExternalStorageDirectory().getAbsolutePath(); } else { // 引导用户前往设置页授权 Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); }
⚠️ 注意:Google Play对使用MANAGE_EXTERNAL_STORAGE权限的应用审核严格,仅文件管理器、备份工具等特定场景的应用会被允许上架。
2. 合规替代方案(推荐)
如果你的应用无需直接操作根目录,而是访问音频、图片等公共媒体内容,推荐使用以下合规方式:
- 访问公共媒体目录:使用
MediaStore API(替代已废弃的Environment.getExternalStoragePublicDirectory()),可以安全读写公共媒体文件; - 应用私有外部存储:使用
getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_MUSIC),对应路径为/storage/emulated/0/Android/data/com.example.music_player/files/Music/,该目录下的文件会随应用卸载自动删除,且无需额外存储权限。
总结
- 必须访问根目录时:在Android 10+申请
MANAGE_EXTERNAL_STORAGE权限后,可继续使用废弃的Environment.getExternalStorageDirectory(); - 非必要场景:优先采用分区存储允许的合规方案,避免权限审核风险。
内容的提问来源于stack exchange,提问作者markzzz
相关产品推荐
相关产品推荐

