首页 > 解决方案 > 如何使用 Context.getExternalFilesDirs(String)、Context.getExternalCacheDirs() 获取 /storage/emulated/0

问题描述

如果我使用Environment.getExternalStorageDirectory(),我将正确获取 /storage/emulated/0 。但是 getExternalStorageDirectory 已被弃用,所以我正在尝试使用Context.getExternalFilesDirs(String), Context.getExternalCacheDirs(). 我越来越喜欢了/storage/emulated/0/Android/data/com.example.statussaver。基本上它返回当前的应用程序文件目录。如何使用 Context Api 获取 /storage/emulated/0。提前致谢

标签: androidandroid-file

解决方案


您不想再获得该值,因为从文档中

当应用程序定位Build.VERSION_CODES.Q时,从此方法返回的路径不再可供应用程序直接访问

这意味着即使你走上了同样的道路,它对你也毫无用处。根据您的用例,您应该改用https://developer.android.com/training/data-storage/shared中列出的策略之一。

Android 提供了用于存储和访问以下类型的可共享数据的 API:

  • 媒体内容:系统为这些类型的文件提供标准的公共目录,因此用户拥有所有照片的公共位置,所有音乐和音频文件的另一个公共位置,等等。您的应用可以使用平台的 MediaStore API 访问此内容。
  • 文档和其他文件:系统有一个特殊目录用于包含其他文件类型,例如使用 EPUB 格式的 PDF 文档和书籍。您的应用可以使用平台的存储访问框架访问这些文件。
  • 数据集:在 Android 11(API 级别 30)及更高版本上,系统会缓存多个应用可能使用的大型数据集。这些数据集可以支持机器学习和媒体播放等用例。BlobStoreManager 应用程序可以使用API访问这些共享数据集 。

有关这些 API 的更多信息,请参阅以下指南:


推荐阅读