- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序创建照片,然后将其插入库存相机的画廊桶中。 (我希望照片存储在标准相机拍摄的其他照片附近)
下面的代码是这样做的:
ContentValues values = new ContentValues();
values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, taken_at);//msec
values.put(MediaStore.Images.ImageColumns.DATE_ADDED, taken_at/1000);//sec
values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, taken_at/1000);//sec
values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, fileName);
values.put(MediaStore.Images.ImageColumns.TITLE, fileName);
values.put(MediaStore.Images.ImageColumns.MIME_TYPE, "image/jpeg");
values.put(MediaStore.Images.ImageColumns.ORIENTATION, orientation);// << ORIENTATION
values.put(MediaStore.Images.ImageColumns.DATA, dir+"/"+fileName);
uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
OutputStream os = getContentResolver().openOutputStream(uri);
// WRITE JPEG BINARY DATA
当我从 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 选择最后两张照片(一张由相机拍摄,第二张由我的应用拍摄)时,我得到以下信息:
fields:
_id, bucket_id, date_added, date_modified, datetaken, _display_name,
orientation, title
fields values of photo taken by stock camera:
4471, 856031460, 1323942742, 1323942742, 1323942742189, 2011-12-15 15.52.22.jpg,
90, 2011-12-15 15.52.22.jpg
values of photo taken by my app:
4470, 856031460, 1323942722, 1323942722, 1323942722545, 2011-12-15 15.52.02.jpg
90, 2011-12-15 15.52.02.jpg
到目前为止,还不错。它正确显示在图库中。当我重新安装 sdcard 并且媒体扫描仪完成他的工作时出现问题:
stock camera's photo after re-mounting sdcard
1241, 856031460, 1323942742, 1323942742, 1323942742189, 2011-12-15 15.52.22.jpg
90, 2011-12-15 15.52.22.jpg
my app's photo after re-mounting sdcard
1242, 856031460, 1323943033, 1323942722, 1323942722000, 2011-12-15 15.52.02.jpg
0, 2011-12-15 15.52.02
// WTF? orientation defaulted, date_added and date_modified were updated
看起来这些照片是重新插入的,但现在我的应用程序的照片是用字段的默认值(包括方向)重新插入的,而库存相机的照片值没有改变(_id 除外)!
现在我的应用程序的照片在图库中显示不正确(旋转,因为方向已重置),而普通相机的照片没问题。
媒体扫描器如何识别媒体数据库中的记录与它现在扫描的文件之间的关系?看起来在我的情况下它不能这样做,删除旧记录,“链接到不存在的文件”并插入新的“以前从未插入过”的记录。
任何想法,如何解决这个问题?
PS:两张照片都在同一个目录
最佳答案
MediaScanner 扫描目录中的文件,如果是照片,它会扫描包含 EXIF 标签的照片标题,并从中获取 ORIENTATION、DATE_TAKEN、DATE_MODIFIED 标签。如果此数据不等于数据库中的数据,则替换数据库数据。
如果遇到此问题,您需要使用有效值手动更新 ORIENTATION exif 标签。
另外我必须提到 Android exif 管理器有很多错误,您可能想要使用效果很好的 org.apache.sanselan 库。
关于java - MediaScanner 将照片重新插入图库并重置其方向和其他字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8519503/
我是一名优秀的程序员,十分优秀!