FileOutputStream не сохраняет изображение во внешнем хранилище

Я пытаюсь сохранить Imgefile из снимка, сделанного с камеры с высоким разрешением. К сожалению, файл не создается. Я не знаю, где ошибка.

public void saveImage(Bitmap imageFile) {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageName = "Image_" + timeStamp;

try {
String path = getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString();
File saveImage = new File(path + File.separator + imageName + ".jpg");
FileOutputStream out = new FileOutputStream(saveImage);
imageFile.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.close();

} catch (IOException e) {
e.printStackTrace();
}
}

В AndroidManifest.xml я установил разрешение на запись во внешнее хранилище.

<manifest>
[...]
    <uses-feature
        android:name="android.hardware.Camera"
        android:required="false" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.Camera.autofocus" />

    <application
       [...]>

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.android.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_path" ></meta-data>
        </provider>
[...]
</manifest>

person Malik    schedule 21.07.2019    source источник
comment
К сожалению, файл не создается - как вы это проверяете? Начните с adb shell или Проводника устройств Android Studio. Если они не отображают ваш файл, проверьте в Logcat трассировку стека, связанную с исключением. Если эти do показывают ваш файл, вам нужно использовать MediaScannerConnection и его метод scanFile() для обновления MediaStore, чтобы другие вещи могли узнать о новом содержимом.   -  person CommonsWare    schedule 21.07.2019
comment
Я запускаю приложение на эмуляторе. Там я смотрю с помощью приложения File Explorer для нового созданного файла в папке приложения. Вновь созданных файлов нет.   -  person Malik    schedule 21.07.2019
comment
Попробуйте adb shell или Проводник устройств Android Studio.   -  person CommonsWare    schedule 21.07.2019
comment
Ты был прав. Я посмотрел с помощью Android Studios Device File Explorer и увидел много изображений, которые были созданы, но они не отображались. С вашей помощью я сделал метод с MediaScannerConnection, и теперь файлы сохраняются по желанию. Большое спасибо!   -  person Malik    schedule 21.07.2019


Ответы (1)


Создайте новый файл перед записью в него (поскольку FileOutputStream требует открытия существующего файла):

File saveImage = new File(path + File.separator + imageName + ".jpg");
saveImage.createNewFile();  /// <--- add this line
FileOutputStream out = new FileOutputStream(saveImage);
person S-Sh    schedule 21.07.2019