SDカードに写真を書き込もうとしています。SDカードにファイルを書き込めません
リムーバブルストレージに書き込む権限があり、sdカードがマウントされています。
また、SDカードへのパスが存在することを確認したところ、肯定的な結果が得られました。
ここでは、mkdir()
機能を使用すると失敗します。 falseを返し、ファイルは作成されません。
私はサムスンA6(マシュマロ)とサムスンTAB4(ロリポップ)
これは私がSDカードへのパスを取得するために使用しているコードのスニペットの両方でテストされています。私はパスがサムスンA6は/ストレージです/ 6DD9-1D15から、この関数で返さstackoverflowの答えから
を取っ
標準的な手順は、サムスンのデバイスで動作しませんでしたので、私はこのコードのスニペットを使用しています。
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ディレクトリ内のフォルダを書き込むために使用しているコード(私は写真を置くている)APIレベルで
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();
}
}
ありがとう、私はコードを使用しています –
パスを取得するために使用するコードまたは作成したコードを意味しますか? –