无法在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上写入外部存储的主要内容,如果未能解决你的问题,请参考以下文章