gpt4 book ai didi

android - 保存到图库 - Android

转载 作者:行者123 更新时间:2023-11-29 23:06:42 27 4
gpt4 key购买 nike

我在 Android 上保存到图库时遇到了一个奇怪的(奇怪的是具体的)问题。

一些背景知识:我正在开发的应用程序需要能够将图像保存到图库中,这一点之前已在此处进行了充分讨论。但是,这个项目有一个特定的要求,我需要能够用特定的日期/时间标记它。

我已经尝试了几种方法来让它正常工作,到目前为止,我拥有的最好的方法是解决方法。

我现在正在做的是生成图像,将其保存到文件并在 EXIF 数据中设置创建日期。然后我打开 Google 相册应用,它出现在图库中,显示正确的日期和时间,并且位于图库中的正确位置。

然而,这个问题是它不会自动显示在任何其他图库软件中(例如,给定设备可能附带的 OEM 图库应用),如果 Google 相册应用是保存时打开;它必须关闭并重新启动才能显示。

现在,如果我运行媒体扫描,它会忽略 EXIF 数据并且图像显示为最后创建的图像。

这是我目前使用的代码:

    static class InsertImageObj{
public String url;
public long id;
}
public static InsertImageObj insertImage(Bitmap source,
String title, long time) {
String path = createDirectoryAndSaveFile(source, title, time);

String stringUrl = path;
InsertImageObj retVal = new InsertImageObj();
retVal.url = stringUrl;
return retVal;
}

private static String createDirectoryAndSaveFile(Bitmap imageToSave, String fileName, long dateTime) {
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); //DCIM = Digital Camera Image. This is where camera photos go!
if (!directory.exists()) {
directory.mkdirs();
}
File file = new File(directory, fileName);
if (file.exists()) {
file.delete();
}
try {
FileOutputStream out = new FileOutputStream(file);
imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.flush();
out.close();
ExifInterface ei = new ExifInterface(file.getAbsolutePath());
ei.setAttribute(ExifInterface.TAG_DATETIME, convertToExifDateTime(dateTime));
ei.setAttribute(ExifInterface.TAG_DATETIME_ORIGINAL, convertToExifDateTime(dateTime));
ei.setAttribute(ExifInterface.TAG_DATETIME_DIGITIZED, convertToExifDateTime(dateTime));
ei.saveAttributes();
} catch (Exception e) {
e.printStackTrace();
}
return file.getAbsolutePath();
}
private static String convertToExifDateTime(long timestamp) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", Locale.getDefault());
return sdf.format(new Date(timestamp));
}

我还尝试在文件上运行 setLastModified(这不起作用,操作系统权限或其他)并使用 MediaScannerConnection 实例扫描个人保存后的文件。然而,后者会导致系统忽略 Exif 数据中的日期/时间标签。我还尝试通过 ContentResolver 实例将图像插入图库并设置 DATE_ADDEDDATE_TAKEN 字段,同样无济于事。

我在这里错过了什么非常非常明显的东西吗?

最佳答案

您需要将图像保存在媒体商店提供商中

使用这个函数

public static void imageToGallery(Context context, String fileName) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
values.put(MediaStore.MediaColumns.DATA, fileName);
context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}

因此,保存图像后,调用 imageToGallery

关于android - 保存到图库 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56428120/

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