问题1:关于时间显示1970年的问题,参看博客Android 图片保存到相册时间显示为1970的问题,它通过一个自定义方法getRealPathFromURI()来获取绝对地址,更新图库来解决这个问题,是有效的,但是仍然没有解决图片重复的问题。
问题2:关于保存两张图片的问题,参看博客Android调用MediaStore.Images.Media.insertImage保存图片时生成两张图片的问题。通过几台机型测试发现,这个覆盖原生API的写法,既能解决问题2,同时解决了问题1,而且要简单很多。API插入方法:
MediaStore.Images.Media.insertImage(getContext().getContentResolver(),path_export, file_export.getName(), file_export.getName());
会在部分机型上自动生成一张缩略图,比如小米8(估计其他小米手机都有这个问题),于是深入inserImage源码: 发现保存图片的方法就是这个:
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DATA, file_export.getAbsolutePath());
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
Uri uri = this.getContext().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
而红框部分生成了缩略图,那么掉图中红框部分代码(生成缩略图功能)即可,以此来直接替换insertImage方法。
那出现1970年的原因是什么呢,参看博客 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710172758397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpYmV5b25kXw==,size_16,color_FFFFFF,t_70)
解决问题2中的方法应该是直接覆盖了那个图像内部的原始日期域DATE_TAKEN和DATE_ADDED。但是我并没有调用:
//将图片的拍摄时间设置为当前的时间
values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, System.currentTimeMillis() )
values.put(MediaStore.Images.ImageColumns.DATE_ADDED, System.currentTimeMillis() )
也将时间正确改为了当前时间,这是为什么呢?
|