【问题标题】:How to write a file in external sd card and not in device storage?如何将文件写入外部 sd 卡而不是设备存储?
【发布时间】:2016-11-09 21:38:24
【问题描述】:

我试过了:

  public String getFilename() {
    File file = new File(Environment.getExternalStorageDirectory(), "Test2");
    if (!file.exists()) {
        file.mkdirs();
    }
    String uriSting = (file.getAbsolutePath() + "/" + "IMG_" + System.currentTimeMillis() + ".png");
    return uriSting;
}

我尝试将第二行更改为:

File file = new File("sdcard/Test2");

但该目录仍在设备存储中创建,而不是在外部 sd 卡上。

【问题讨论】:

  • 您是否提供了此权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  • @ShlomiHaver 是的,我做到了,否则我也无法在设备存储中写入。我记得在某处读到,即使设备存储也是外部存储,它在操作系统之外。

标签: android file-handling android-file


【解决方案1】:

您没有对removable storage 的任意访问权限。

在 Android 4.4+ 上,您有两个主要选择:

  1. 使用getExternalFilesDirs()getExternalCacheDirs()getExternalMediaDirs()(注意复数形式),Context 上的所有方法。如果它们返回 2 个以上的位置,则第二个和后续位置是可移动存储上的位置,您的应用可以在没有任何权限的情况下读取和写入。

  2. 使用ACTION_OPEN_DOCUMENT and ACTION_CREATE_DOCUMENT,允许用户选择放置某些内容的位置,用户可以选择可移动存储(或Google Drive,或DropBox,或external storage,或其他任何东西)的位置。你最终得到一个Uri,而不是文件系统路径; use ContentResolver to work with that Uri to get streams for reading and writing.

【讨论】:

  • 我不能允许用户这样做,我需要创建一个特定的目录并获取它的 URL。这不可能吗?
  • @AseedUsmani:您无法创建特定目录,除非该目录恰好位于上面选项 #1 中概述的根目录下的某个位置。
  • Camera App如何将我们的点击保存在我们的SD卡上,在DCIM/Camera目录下?我可以用同样的方法吗?
  • @AseedUsmani:您的问题中已经有了使用外部存储的代码。设备的内置相机应用程序可能拥有额外的权限来使用可移动存储,这超出了普通应用程序的功能,但除非您正在构建自己的设备或自定义 ROM,否则这对您没有帮助。
  • API 24 设备上还有 Scoped Directory Access,允许您请求对 SD 卡的读/写访问权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多