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