微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Exifinterface saveAttributes() 由于“无法将原始文件复制到临时文件”而失败

如何解决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

我认为问题发生在这里:Caused by: java.io.IOException: 无法重命名为 /storage/emulated/0/DCIM/Camera/1619507958498.jpg.tmp

顺便说一下,getAttributes() 工作正常,只有 saveAttributes() 有问题

请帮我检查如何解决这个问题。非常感谢

解决方法

在 Android 11 设备上,操作系统对扩展非常挑剔。

您可以在 DCIM 目录中创建 .jpg、.png 和 .webp 文件,也可以创建其他图像文件。

但不是 .tmp 文件,因为它们不是图像文件。

所以你是 ExifInterface 程序员的受害者。

如果他们决定使用 .jpg.jpg 而不是 .jpg.tmp,您就不会遇到这个麻烦。

提交问题/报告。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。