You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何替代已废弃的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:37:03