无法在Android上写入外部存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在Android上写入外部存储相关的知识,希望对你有一定的参考价值。

我看到其他一些人问同样的问题,但是发布的解决方案都没有帮助我。

我正在尝试从我的android应用程序将(二进制)文件写入外部存储。我把<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />放入我的清单,但我仍然无法创建任何文件。我用来创建文件的代码是

File folder = new File(Environment.getExternalStorageDirectory(), SAVE_DIRECTORY);
File toWrite = new File(folder, "save.bin");
if(!toWrite.exists()){
    try {
        if(!folder.mkdirs())
            Log.e("Save", "Failed to create directories for save file!");
        toWrite.createNewFile();
     } catch (IOException e) {
         Log.e("Save", "Failed to create save file! " + e.getMessage());
     }
 }

mkdirs()的调用失败,createNewFile()抛出IOException(ENOENT,因为该目录不存在)

有谁知道怎么了?我甚至试过重启我的设备。我在Nexus 7上使用API​​级别8,如果它有任何区别的话。

答案

首先,您应该检查ExternalStorageState

public static boolean isSDCARDAvailable(){
   return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}

如果这个方法isSDCARDAvailable返回true,那么使用你的代码

添加权限:

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

另一答案

文档说,从API级别19开始,不需要WRITE_EXTERNAL_STORAGE来读取/写入getExternalFilesDir(String)和getExternalCacheDir()返回的特定于应用程序的目录中的文件。但是,如果您不想在那里写文件而是想将文件写入getExternalStorageDirectory(),则在API 23或更高版本下,您必须在运行时使用requestPermissions()请求权限。一旦我这样做,我就能在getExternalStorageDirectory()中创建一个目录。

另一答案

我也遇到了这个问题,所有内容都在我的应用程序中正确配置,即我拥有外部存储的读写权限。

我的问题在于我创建存储文件的路径:

private val LOG_BASE_PATH = Environment.getExternalStorageDirectory().path + "myFolder"

请注意,必须包含“/”如下:

private val LOG_BASE_PATH = Environment.getExternalStorageDirectory().path + "/myFolder/"

没有它,您将无法创建该文件夹。 Android不会失败,因此您可能会认为手机配置或应用权限存在问题。

理想情况下,这有助于某人节省一些宝贵的时间。

以上是关于无法在Android上写入外部存储的主要内容,如果未能解决你的问题,请参考以下文章

即使设置了权限,也无法写入 Android 外部存储

在Android中将文件写入外部存储失败

在 Android 的外部存储中写入文件

为啥我无权写入外部存储上的应用程序目录?

除非在授予权限后重新启动应用程序,否则无法写入外部存储

在读取/写入文件到内部/外部存储android时使用啥类和方法?