【问题标题】:How to write files to external storage (sdcard)如何将文件写入外部存储(SD卡)
【发布时间】:2014-01-13 15:44:05
【问题描述】:

我知道这可能已经回答了很多次并且我已经搜索过,但我无法解决我的问题。每次我尝试写入 sdcard 时,它似乎都会进入内部存储。我的代码行很简单

File root = android.os.Environment.getExternalStorageDirectory(); 
File dir = new File (root.getAbsolutePath() +"/mydir");
dir.mkdirs();

当我转到“我的文件”时,该目录始终出现在 /storage/emulated/0 而不是 sdcard 中。我拥有清单中设置的所有权限。我缺少一些简单的东西吗?

附:我的设备是 Note 3。我可以手动将文件复制到 sdcard。

【问题讨论】:

  • 在 SDK 中创建模拟器时,您是否为虚拟内存卡分配了内存?
  • @Saqib 好像他/她在他/她的 Note 3 上这样做了。
  • 是的,我使用的是我的实际 Note 3,而不是模拟器。 -马克

标签: android


【解决方案1】:

如何将文件写入外部存储(SD卡)

在大多数 Android 设备上,外部存储不是“sdcard”。

当我转到“我的文件”时,该目录始终出现在 /storage/emulated/0 而不是 sdcard 上

那是因为/storage/emulated/0 是外部存储。

引用the documentation:

每台 Android 兼容设备都支持共享的“外部存储”,您可以使用它来保存文件。这可以是可移动存储介质(例如 SD 卡)或内部(不可移动)存储。

Android SDK 几乎不支持替代存储位置,例如 SD 卡。如同一文档页面所述,Android 4.4 有一点:

有时,已分配内部存储器分区用作外部存储器的设备也可能提供 SD 卡插槽。当此类设备运行 Android 4.3 及更低版本时,getExternalFilesDir() 方法仅提供对内部分区的访问权限,您的应用无法读取或写入 SD 卡。但是,从 Android 4.4 开始,您可以通过调用 getExternalFilesDirs() 来访问这两个位置,它会返回一个包含每个位置条目的 File 数组。阵列中的第一个条目被视为主要外部存储,您应该使用该位置,除非它已满或不可用。如果您想访问这两个可能的位置,同时还支持 Android 4.3 及更低版本,请使用支持库的静态方法 ContextCompat.getExternalFilesDirs()。这也会返回一个 File 数组,但在 Android 4.3 及更低版本上始终只包含一个条目。

【讨论】:

  • 为什么这不是公认的答案? getExternalFilesDir() 实际上返回模拟位置和物理位置(在我的 Android 6 设备上,物理位置是第二个)。谢谢你。要找到这个问题的答案并不容易。看起来它就在我的眼皮底下,在文档中:)
【解决方案2】:

我在这里发布了查找 sdcard 路径的代码(在问题的正文中)

How can I properly obtain the external SD card path?

它应该可以解决您的问题。 “外部”存储并不总是您的 sdcard,因为许多 Android 设备将外部存储视为内部存储器的一个分区。真正的外部存储(你的sdcard)的路径是由设备的构造函数设置的,并没有一个标准的API来获取它。

【讨论】:

    【解决方案3】:

    打印出来

    dir.toString()
    

    在上面,看看你得到了什么。然后对比一下

    File dir = new File(getExternalFilesDir(null) +  File.separator + "mydir");
    

    如果您确实喜欢第二种选择,您应该(我还是这样做了)/storage/sdcard0/data/your.package.name/files/mydir 并且您上面的目录是 mydir,而不是 My Files?

    【讨论】:

      【解决方案4】:

      您需要手动查找外置 sd 卡,这取决于手机。

      请参阅此tutorial,其中有一个如何测试到 sd 卡的不同路径的示例。

      【讨论】:

        猜你喜欢
        • 2016-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多