【问题标题】:How can one read files from an SD card in Android 7.0?如何在 Android 7.0 中从 SD 卡中读取文件?
【发布时间】:2018-10-03 11:12:32
【问题描述】:

对于以前的手机 (Android 4.0),我编写了一个应用程序,它使用我使用 USB 电缆从 PC 复制到 SD 卡的数据文件。该应用程序使用 Environment.getExternalStorageDirectory() 来检索文件,正如许多网站所建议的那样。

在装有 Android 7.0 的手机上,此应用不再工作。 Environment.getExternalStorageDirectory() 返回映射到 internal 存储的“storage/emulated/0/”。我尝试了 getExternalStoragePublicDirectory,但这引用了相同的位置。

所以我尝试了一个硬编码的“/sdcard”。这也没有引用 SD 卡。在从应用程序将测试文件写入该位置时,我在内部存储中使用 File Commander 应用程序找到了该文件,但在内部存储或使用 PC 上的 Windows 资源管理器的 SD 卡上找不到该文件,因此它我不清楚它到底在哪里。在我的网络搜索中,我看到了对 /sdcard0 和 /sdcard1 的引用,但测试它们发现我的手机上两者都不存在。

因此,我的主要问题是:鉴于 getExternalStorageDirectory() 不提供此功能,我如何在 Android 7.0 及更高版本中获取 SD 卡的根目录?

还有一个附属问题:getExternalStorageDirectory() 函数没有获取外部存储目录的意义何在?

【问题讨论】:

  • getExternalStorageState 返回什么?
  • what is the point of a getExternalStorageDirectory() function which does not get the external storage directory? 好吧,因为内置存储就是这样调用的。您更需要可移动存储。

标签: java android


【解决方案1】:

您可以查看getExternalFilesDirs() 返回的第二项,以在 SD 卡上找到您的应用特定目录。

但是,如果您想将您的应用更新为现代标准,请使用Intent.ACTION_OPEN_DOCUMENT_TREE 和/或StorageVolumes 查看Storage Access Framework

【讨论】:

  • 这是向前迈出的一小步 - 谢谢。 getExternalFilesDirs() 返回的第二项确实是 SD 卡上的目录。但它是 Android/Data 下五级的空子目录。我想我可以 GetAbsolutePath() 并修剪水平,直到我回到 SD 卡的根目录,但这似乎是一个可怕的 hack。除了大幅重写应用程序之外,真的没有更优雅的方法吗?
  • That is a small step forward ??我不同意!这就是你的步骤。不,这不是一个可怕的黑客。这是一个好方法。每个人都这样做。但是你只能阅读。在原始目录中你可以读/写。
  • Is there really not a more elegant method 存储访问框架。
  • But it's an empty subdirectory 当然。那你会期待什么?但是有人创建了那个目录......从Android目录开始......这不是一个谜吗?
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多