2011-12-15 9 views
1

だリセットされます。 ( - 私のアプリで株式カメラで撮影された1、第二)私は、最後の写真2枚を選択するとギャラリーにMediaScanner再挿入写真&それは私のアプリケーションは、写真を作成し、ギャラリーの株式カメラのバケツに挿入する向きや他の分野

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 

:(私は写真が標準のカメラで撮影した他の写真の近くに格納したい)

コードに続いてこれを行います

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 

をこれまでのところ、とても良い:MediaStore.Images.Media.EXTERNAL_CONTENT_URIから、私は次の取得します。ギャラリーに正しく表示されます。

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 

それは、これらの写真のように見えるが再挿入されているが、今私のアプリの写真は、株式しばらく(向きを含む)フィールドのデフォルト値で再挿入されている:私はSDカード再マウントし、メディアスキャナが彼の仕事を終了したときに問題が表示されますカメラの写真の値は変更されませんでした(_idを除く)!

私のアプリの写真は、ストックカメラが正常である間に、間違って(向きがリセットされたため回転しています)ギャラリーに表示されます。

メディアスキャナは、メディアdb内のレコードと現在スキャンしているファイルとの関係をどのように認識しますか?私の場合はそれを行うことができないように見える、古いレコードを削除し、 "存在しないファイルにリンク"し、新しい "前に挿入されていない"レコードを挿入します。

任意のアイデアを、どのようにこの問題を解決するには?

PS:両方の写真は同じディレクトリに配置されている

答えて

2

MediaScannerディレクトリ内のファイルをスキャンし、写真の場合には、それから、DATE_MODIFIEDタグをEXIFタグが含まれていること、写真のヘッダをスキャンし、方向性を取る、DATE_TAKEN。 このデータがデータベース内のデータと等しくない場合は、データベースデータが置き換えられます。

この問題が発生した場合は、有効な値でORIENTATION exifタグを手動で更新する必要があります。

また、Androidのexifマネージャは非常にバグがあり、素晴らしい機能を持つorg.apache.sanselanライブラリを使用することが必要な場合があります。

関連する問題