如何使用 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。提前致谢

解决方法

您不想再获得那个值,因为从 documentation

当应用以 Build.VERSION_CODES.Q 为目标时,此方法返回的路径不再可供应用直接访问

这意味着即使您获得了相同的路径,它对您也毫无用处。根据您的用例,您应该改用 https://developer.android.com/training/data-storage/shared 中概述的策略之一。

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

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

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