起源
项目经理提出一个需求:把图片放入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及以上才支持。
网友评论