Android 如何改变图片的拍摄时间

作者: 文艺的程序狗 | 来源:发表于2018-04-02 12:07 被阅读144次

起源

项目经理提出一个需求:把图片放入Camera(Android 相册目录)目录下,并且让其显示在最前面。

思路

把图片放置到Camera目录并且让其相册可以查看到倒不难,关键代码如下

 ......
 String path = Environment.getExternalStorageDirectory().getPath();
 File cameraFile = new File(path+"/DCIM/Camera" ,  files[i].getName());//图片放置到该目录下
 ......
 MediaStore.Images.Media.insertImage(this.getContentResolver(),cameraFile.getAbsolutePath(),files[i].getName(),null);
 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+cameraFile.getPath())));

关于图片排序的问题,我使用华为手机测试图片排序是按照拍摄的时间排序的,所以想到的是修改照片的拍摄时间

注意:这里默认手机相册的文件夹为DCIM/Camera 市面上大多数手机的默认相册目录为该目录,也存在一些机型不是的

但是这里遇到一个问题:有的图片拍摄时间比较早比如2008:01:01 09:11:22,导入到相册里排在最后面了。

网上的坑

有的博客说使用ExifInterface 修改TAG_DATETIME就可以了,但是试过,修改之后里面读取可以生效,但是下次读取还是之前的时间,说明还是没有写进去

解决

还是使用ExifInterface 修改的不是TAG_DATETIME 而是TAG_DATETIME_ORIGINAL就OK了

注意:有的图片获取到的TAG_DATETIME为Null,这时可以不处理,图片默认也是排在最前面的

关键代码

DateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
String format = dateFormat.format(date);
exifInterface.setAttribute(ExifInterface.TAG_DATETIME_ORIGINAL, format);
exifInterface.saveAttributes();

注意:ExifInterface.TAG_DATETIME_ORIGINAL需要在Android 6.0及以上才支持。

参考

https://forums.adobe.com/thread/427502

相关文章

网友评论

  • efe4a2d0b67f:是手机6.0系统才支持吗,我设置了无效
    文艺的程序狗:不好意思,文章有误,api版本是24 6.0是23 所以不支持

本文标题:Android 如何改变图片的拍摄时间

本文链接:https://www.haomeiwen.com/subject/woithftx.html