我试图在 SD 卡上写入照片,但没有成功。
我已经获得了在可移动存储中写入的权限,并且 SD 卡已安装。
另外,我检查了 SD 卡的路径是否存在,并且得到了肯定的结果。
失败的地方是当我使用mkdir()
功能。它返回 false 并且没有创建文件。
我已经在三星 A6(棉花糖)和三星 Tab4(棒棒糖)上进行了测试
这是我用来检索 SD 卡路径的代码片段。
因为标准程序不适用于三星设备,所以我使用的是从 stackoverflow 答案中获取的这段代码
三星 A6 中此函数返回的路径是 /storage/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();
}
}