android - 如何使用 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。提前致谢
解决方案
您不想再获得该值,因为从文档中
当应用程序定位
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 的更多信息,请参阅以下指南:
推荐阅读
- html - 双击时防止在 Chrome 中突出显示文本
- java - 如何使用单个流操作从对象中获取多个值?
- javascript - 如何在three.js中弯曲圆柱体?
- jquery - 先前声明的变量没有传递值
- acumatica - 如何在添加到 INItemPlan 的用户字段中保存值?
- sql - 重复的总行数超过
- python - 在序列化程序 Django Rest + Django JWT 中获取记录的用户信息
- python-3.x - 当我下载日期并转换为 DataFrame 时,我丢失了第一列的数据
- angular - TabView 中的 PrimeNG VirtualScroller 无法正常工作
- python - 根据另一个包含列表的 DataFrame 列有条件地更新 DataFrame 列