Мое приложение создает фотографию, а затем вставляет ее в корзину галереи стоковой камеры.(Я хочу, чтобы фотографии сохранялись рядом с другими фотографиями, снятыми стандартной камерой)
Следующий код делает это:
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: обе фотографии находятся в одном каталоге