Ошибка Exifinterface saveAttributes() из-за «Не удалось скопировать исходный файл во временный файл»

Итак, теперь я пишу пользовательскую камеру и хочу записать местоположение в изображения, которые я сделал, по какой-то причине я не могу использовать здесь builder.set(). Файл был создан так:

      String name = System.currentTimeMillis() + ".jpg";
file = new File(Environment.getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_DCIM + "/Camera"), name);

Чтобы упростить вопрос, я просто создаю ExifInterface с правильным путем к файлу и вызываю метод saveAttributes(), он выглядит так:

      ExifInterface exif = new ExifInterface(file.getAbsolutePath());
exif.saveAttributes();

но потом я получаю этот журнал,

      D/qdgralloc: GetYUVPlaneInfo: Invalid format passed: 0x21
D/MediaScannerConnection: Scanned /storage/emulated/0/DCIM/Camera/1619507958498.jpg to content://media/external_primary/images/media/11032
V/haha: Failed to copy original file to temp file
W/System.err: java.io.IOException: Failed to copy original file to temp file
        at android.media.ExifInterface.saveAttributes(ExifInterface.java:2098)
        at com.example.secondpractice.fragment.CameraFragment.takeDelayedPicture(CameraFragment.java:1042)
        at com.example.secondpractice.fragment.CameraFragment.onClick(CameraFragment.java:1301)
        at com.example.secondpractice.fragment.-$$Lambda$zncvcj43pAXOQyaoJTDWHHAg_tA.onClick(Unknown Source:2)
        at android.view.View.performClick(View.java:7496)
        at android.view.View.performClickInternal(View.java:7473)
        at android.view.View.access$3600(View.java:831)
W/System.err:     at android.view.View$PerformClick.run(View.java:28647)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:236)
        at android.app.ActivityThread.main(ActivityThread.java:7876)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
W/System.err: Caused by: java.io.IOException: Couldn't rename to /storage/emulated/0/DCIM/Camera/1619507958498.jpg.tmp
        at android.media.ExifInterface.saveAttributes(ExifInterface.java:2084)
        ... 14 more

Я думаю, что проблема здесь: Причина: java.io.IOException: не удалось переименовать в /storage/emulated/0/DCIM/Camera/1619507958498.jpg.tmp

Кстати, getAttributes () работает нормально, проблема есть только у saveAttributes()

пожалуйста, помогите мне проверить, как это решить. Большое спасибо

1 ответ

Решение

На устройстве Android 11 ОС очень требовательна к расширениям.

Вы можете создавать файлы .jpg, .png и .webp в каталоге DCIM и, возможно, другие файлы изображений.

Но не файлы .tmp, поскольку они не являются файлами изображений.

Итак, вы стали жертвой программистов ExifInterface.

Если бы они выбрали .jpg.jpg, а не .jpg.tmp, у вас не было бы этой проблемы.

Отправьте вопрос / отчет.

Другие вопросы по тегам