2016-07-13 17 views
1

画像ギャラリーを構築する私は奇妙な問題に直面しています。Android - ThumbnailUtils.getThumbnailは間違った画像を返します

String sortBy=MediaStore.Images.Media.DATE_MODIFIED+" desc"; 
String selection=MediaStore.Images.Media.DATA +" like?";  
String[] selectionArgs=new String[]{"%"+folderPath+"%"}; 
String[] projection = {MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA,MediaStore.Images.Media.DATE_MODIFIED,MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME}; 
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortBy); 

その後、私は質問から得たすべてのIDの画像を収集し始めます。

Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(contentResolver, imageId, MediaStore.Images.Thumbnails.MICRO_KIND, null); 

ほとんどのデバイスでは、次のような特定のイメージIDのビットマップを取得します。今日私はXiaomi Redmi 3デバイスをテストしました。これはほぼ常に同じサムネイルを返します。だからアルバムに200枚の写真がある場合、私は1つか2つの正しいと残りは同じ正確な画像です。

ただし、MINI_KINDサムネイルをリクエストしても、すべて正常に返されます。

これを引き起こしているのは何ですか。どうすれば回避できますか?

+0

CyanogenMod 14.1(夜間ビルド)を実行しているNexus 5でも同じ問題があります。 – MaxGyver

+0

これは避けることができないバグだと思いますので、MINI_KINDを使用し、後でビットマップのサイズをMICRO_KINDサイズに変更しました – Anonymous

+0

残念ながら、MINI_KINDははるかに低速です。 MICRO_KINDサムネイルを取得するとエラーが発生した場合は、最初にこれを試してから、必要に応じてMINI_KINDサムネイルを読み込むことができます。 – MaxGyver

答えて

0

私は、私たちの問題の解決策を見つけた:

大きいサムネイル(MINI_KIND)はDCIM/.thumbnails/*.jpgに格納されています。 小さなサムネイル(MICRO_KIND)はDCIM/.thumbnails/.thumbdata*.thumbindex*に格納されています。だから私は.thumbdata.thumbindexで始まるファイルを削除した後、私のアプリは正しいMICRO_KINDサムネイルを取得することができました。サムネイルを再度作成する必要があるため、初めてです。古いサムネイルファイルが破損していたようです。

+0

はい、私はそれを知っています。しかし、ユーザーが手作業でそのフォルダを削除しなければならない場合、解決策ではありません。ところで、デフォルトのギャラリーアプリといくつかのダウンロードされたギャラリーアプリは正しいサムネイルを表示していました。 MINI_KINDを使用していない場合、私はそれを行うための他の方法を見ることができません... – Anonymous

関連する問題