gpt4 book ai didi

java - 使用 Android 的 MediaStore(ContentResolver/范围存储)创建图像文件后文件扩展名和文件名错误

转载 作者:行者123 更新时间:2023-12-04 23:41:06 26 4
gpt4 key购买 nike

我正在使用 MediaStore and ContentResolver使用 MediaStore.Images 保存图像文件 (jpg/png/gif) 的 API .
它可以工作,但问题是所有文件都以 .jpg 扩展名保存,并且文件名始终是“以millis.jpg 为单位的当前时间”。

这是我在 ContentValues 中放入的示例:

date_added=1575480356 _display_name=2067623.gif date_modified=1575480356 mime_type=image/gif

但是在将其插入 ContentResolver 并写入文件后,显示名称更改为 2067623.jpg和文件名 1575480356.jpg .

我如何让它保留文件名和扩展名 ?

代码:
    ContentResolver resolver = activity.getContentResolver();
Uri mediaCollection;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
mediaCollection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
} else {
mediaCollection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
}

ContentValues mediaDetails = new ContentValues();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
final String relativeLocation = Environment.DIRECTORY_PICTURES + File.separator + "my_folder";
mediaDetails.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
mediaDetails.put(MediaStore.Images.Media.IS_PENDING, 1);
mediaDetails.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);
}
String mimeType = "image" + "/" + getExtension(p); // jpg/png/gif
mediaDetails.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
mediaDetails.put(MediaStore.Images.Media.MIME_TYPE, mimeType);
mediaDetails.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
mediaDetails.put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis() / 1000);

Uri contentUri = resolver.insert(mediaCollection, mediaDetails);

write(contentUri, resolver, p, fileName); // Write the file content using resolver.openOutputStream(contentUri)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
mediaDetails.clear();
mediaDetails.put(MediaStore.Images.Media.IS_PENDING, 0);
resolver.update(contentUri, mediaDetails, null, null);
}

最佳答案

你找到解决办法了吗?我没有,所以我最终这样做了:

private void addImageToGalleryLegacy(@NonNull final String imagePath, @NonNull final String fileName) throws IOException {
File fIn = new File(imagePath);
String outPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
File fOut = new File(outPath, fileName);
FileInputStream in = new FileInputStream(fIn);
FileOutputStream out = new FileOutputStream(fOut);
copy(in, out);
}

基本上(就像我们在 Q 之前一样)我们可以将图像直接复制到画廊。
在我的例子中,“imagePath”是“Android/data/[package name]/files/Pictures”。

关于java - 使用 Android 的 MediaStore(ContentResolver/范围存储)创建图像文件后文件扩展名和文件名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59182066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com