[英]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.