2016-07-13 4 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의 이미지를 수집하기 시작합니다. 다음과 같이 특정 이미지 ID에 대한 비트 맵을 가져옵니다.

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

대부분의 장치에서 잘 동작합니다. 오늘 저는 Xiaomi Redmi 3 장치를 테스트했습니다.이 장치는 거의 항상 동일한 축소판을 반환합니다. 그래서 앨범에 200 장의 그림이 있다면 나는 하나 또는 두 장의 정확한 것을 얻고 나머지는 똑같은 정확한 이미지입니다.

그러나 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