目前,我正在使用以下方法在android外部存储中创建路径。
public void createPath() {
String path = Environment.getExternalStorageDirectory().getPath()+"/myFolder/";
boolean exists = (new File(path)).exists();
if (!exists) {
new File(path).mkdirs();
}
}
据我所知getExternalStorageDirectory()
并不专门指外部存储。因此,此方法将在用户首选存储(通常是内部存储)中创建myFolder
。
现在我有一个问题:
如果默认存储(用户首选存储)已设置为SD Card
并且它不可读/可写,会发生什么?处理这种情况的最佳方法是什么?
换句话说,如何安全地创建此文件夹?(内部或外部无关紧要)。
答案 0 :(得分:0)
在内部存储中创建文件夹是安全的,无需访问。
//Get free Size internal memory
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
long freeSizeInternalMemoryMB = ((availableBlocks * blockSize) / 1024) / 1024;
//2M available
if (freeSizeInternalMemoryMB > 2) {
//code for create and copy file
}else{
//show error for low storage
}
答案 1 :(得分:0)
据我所知,getExternalStorageDirectory()并不专门引用外部存储。
是的,它确实适用于Android SDK所指的external storage。
因此,此方法将在用户首选存储(通常是内部存储)中创建myFolder。
不,Android SDK所指的是internal storage是另一回事。
如果默认存储(用户首选存储)已设置为SD卡并且它不可读/写,会发生什么?
Android本身没有"用户首选存储"的概念,除非我误解了你的描述。
如何安全地创建此文件夹?
你的代码似乎很好。
只有很小比例的设备(我的猜测:~0.1%),其中外部存储位于可移动媒体上。这是Android 1.x / 2.x的主流型号,但这些设备不再使用,大多数新设备都在板载闪存上有内部和外部存储。如果用户弹出可移动媒体,您将无法访问外部存储。 Environment
上有一些方法可以获取外部存储状态。但是,您无法在用户可以访问的位置编写文件。您的选择将是:
将文件存储在内部存储中,然后在媒体再次可用时将其迁移到外部存储
请勿存储任何内容,要求用户再次提供外部存储空间