无法在SD卡上写入文件
我正试图在SD卡上写下一张照片,但没有成功。无法在SD卡上写入文件
我已经获得了在可移动存储中写入的权限,并且安装了SD卡。
此外,我检查了SD卡的路径存在,我获得了积极的结果。
失败的地方是我使用mkdir()
函数。它返回false并且没有文件被创建。
我已经上都有了三星A6(棉花糖)和三星TAB4(棒棒堂)
这是我使用的检索路径SD卡中的代码段测试。
因为标准程序并没有与三星设备的工作,我使用这个代码片段,我从一个计算器答案
的路径与三星A6这个函数返回了是/存储/ 6DD9-1D15 。
public String[] getStorageDirectories() {
String[] storageDirectories;
String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
List<String> results = new ArrayList<String>();
File[] externalDirs = getApplicationContext().getExternalFilesDirs(null);
for (File file : externalDirs) {
String path = file.getPath().split("/Android")[0];
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && Environment.isExternalStorageRemovable(file))
|| rawSecondaryStoragesStr != null && rawSecondaryStoragesStr.contains(path)) {
results.add(path);
}
}
storageDirectories = results.toArray(new String[0]);
} else {
final Set<String> rv = new HashSet<String>();
if (!TextUtils.isEmpty(rawSecondaryStoragesStr)) {
final String[] rawSecondaryStorages = rawSecondaryStoragesStr.split(File.pathSeparator);
Collections.addAll(rv, rawSecondaryStorages);
}
storageDirectories = rv.toArray(new String[rv.size()]);
}
return storageDirectories;
}
此,取而代之的,是我用写的SD卡下的DCMI目录的文件夹(在我会把照片)
public void mkFolder(String folderPath) { // make a folder under Environment.DIRECTORY_DCIM
File folder = new File(folderPath);
try {
// MKDIRS returns false
if (folder.mkdirs()) {
Log.d(TAG, "folder created:" + folder.toString());
} else {
Log.d(TAG, "create folder fails:" + folder.toString());
}
} catch (Exception ecp) {
ecp.printStackTrace();
}
}
在API级别代码18及以下,您的getStorageDirectories()
将通过其else
块。该块假设:
- 的
SECONDARY_STORAGE
环境变量存在......这不是必需的 - 该
SECONDARY_STORAGE
包含目录的分隔列表...不要求 - 该目录的列表匹配移动存储选项...不要求
- ,您可以用这些目录的工作......这是不需要
在API级别1 9+,您的getStorageDirectories()
代码将通过其if
块。在那里,你开始罚款,打电话getExternalFilesDirs()
。如果该方法返回2个项目,则第二个和后续项目指向可移动存储,并且特别指向可移动存储上可以读取和写入的位置。然后,您的代码假定:
- 该目录中有一个
/Android
路径段......不要求 - 是前
/Android
的目录路径的部分代表在其中您可以创建文件和目录的位置...... 这是不正确的
您不必在特定文件系统级访问,移动存储,除了目录返回的方法如getExternalFilesDirs()
。
所以,要么:
棒由
getExternalFilesDirs()
返回的特定位置,或者转为使用the Storage Access Framework,允许用户选择在哪里存储的内容(其可能是或可能不是可移动存储)
谢谢,它使用getExternalFilesDir()。 –
你是不是很喜欢@MarcoMenardi – nzala
好的,谢谢,我修改了与我正在使用的代码 –
您的意思是我用来检索路径的代码或我编写的代码? –