繁体   English   中英

无法在Android上写入外部存储

[英]Can't write to external storage on 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不会失败,因此您可能会认为手机配置或应用权限存在问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM