Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在外部sd卡而不是设备存储器中写入文件?_Android_File Handling_Android File - Fatal编程技术网

Android 如何在外部sd卡而不是设备存储器中写入文件?

Android 如何在外部sd卡而不是设备存储器中写入文件?,android,file-handling,android-file,Android,File Handling,Android File,我试过这个: public String getFilename() { File file = new File(Environment.getExternalStorageDirectory(), "Test2"); if (!file.exists()) { file.mkdirs(); } String uriSting = (file.getAbsolutePath() + "/" + "IMG_" + System.currentT

我试过这个:

  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卡上创建的。

您无权任意访问

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

  • 使用
    getExternalFilesDirs()
    getExternalCacheDirs()
    getExternalMediaDirs()
    (注意复数形式),所有方法都在
    上下文中使用。如果它们返回2+个位置,则第二个和后续位置是可移动存储上的位置,您的应用程序可以读取和写入这些位置,而无需任何权限

  • 使用,允许用户选择放置某些内容的位置,用户可以选择可移动存储(或Google Drive、DropBox或其他任何内容)。最后得到的是一个
    Uri
    ,而不是文件系统路径


  • 您是否提供了此权限?@ShlomiHaver是的,否则我将无法在设备存储中写入。我记得在某个地方读到,即使设备存储是外部存储,它也是操作系统的外部存储。我不能允许用户这样做,我需要创建一个特定的目录并获取它的URL。这难道不可能吗?@AseedUsmani:你不能创建一个特定的目录,除非该目录恰好位于上面选项#1中列出的根目录下。相机应用程序如何将我们在sd卡上的点击保存在DCIM/Camera目录下?我可以用同样的方法吗?@AseedUsmani:你的问题中已经有了处理外部存储的代码。设备的内置摄像头应用程序可能具有使用可移动存储的附加权限,这超出了普通应用程序的功能,但除非您正在构建自己的设备或自定义ROM,否则这对您没有帮助。API 24设备上也有允许您请求SD卡读/写访问的权限。