Ваша проблема может быть связана с каталогом, в котором вы пытаетесь сохранить файл. Для сохранения файлов на SD-карту вам не нужны никакие специальные разрешения, но способ получения ссылки на папку отличается от того, как вы мы сделали это Это также зависит от того, хотите ли вы сохранить изображение таким образом, чтобы его можно было извлечь из MediaStore (то есть, например, приложение галереи или альбомов или любое другое приложение, которое использует их для поиска изображений) или нет. Предполагая, что вы хотите, чтобы он был указан в MediaStore, вот код для этого:
ContentValues newImage = new ContentValues(2);
newImage.put(Media.DISPLAY_NAME, "whatever name you want shown");
newImage.put(Media.MIME_TYPE, "image/png");
Uri uri = contentResolver.insert(Media.EXTERNAL_CONTENT_URI, newImage);
try {
Bitmap bitmap = //get your bitmap from the Camera, however that's done
OutputStream out = contentResolver.openOutputStream(uri);
boolean success = bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
if (success){
Log.d("Image Writer", "Image written successfully.");
} else {
Log.d("Image Writer", "Image write failed, but without an explanation.");
}
} catch (Exception e){
Log.d("Image Writer", "Problem with the image. Stacktrace: ", e);
}
На моем эмуляторе под управлением v1.5 он успешно сохраняет растровое изображение на SD-карту в папке DCIM / Camera с именем файла, являющимся текущим временем. (Время сохраняется в миллисекундах с 1 января 1970 года, по некоторым причинам также называемого «эпохой».)