起源

项目经理提出一个需求:把图片放入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以上(api 24)才支持。

参考

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐