안녕하세요. UIL을 사용해서 갤러리를 만들고 있는데
로컬이미지를 갤러리로 뿌려줄때, 원본이미지가 아닌 썸네일 이미지를 뿌려서
로딩속도 증가를 꾀하고 있습니다.
그런데, 이미지는 최종수정일자가 있는데 반해, 썸네일은 최종 수정일자가 없어서
최근 사진순으로 배치하는데 당황스럽네요.
썸네일에 보면 원본이미지의 _ID와 연결고리가 있는데,,그걸 사용해보려고 하니
이미지 커서, 썸네일 커서 두번을 돌려야해서 왠지 ..맘에 안들어요..
일반 쿼리라면 걍 from절에 테이블 명 넣고 조인하면 되는데
미디어디비에서는 어떤식으로 처리를 해야할까요? 테이블명이 아니라 URI를 사용해서..어렵네요;
this.mSortOrder = MediaStore.Images.Media.DATE_MODIFIED + " DESC";
//원본이미지 조회
String where;
if( mBucketName != null ){
if( mBucketName.equals(getString(R.string.toolbar_whole_photo))){
where = "1 = 1"; //전체 조회
}else{
where = MediaStore.Images.Media.BUCKET_DISPLAY_NAME+ " = '" + mBucketName + "'";
}
}else{
where = "1 <> 1"; //Diretory 명이 없는 경우 조회 결과 없도록
}
Dlog.d("where : " + where);
String[] projection = { MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATE_MODIFIED};
ContentResolver cr = mGalleryActivity.getContentResolver();
mImageCursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, where, null, mSortOrder);
while(!mImageCursor.isAfterLast()){
int index = mImageCursor.getPosition();
mImagePaths[index] = mPrefixPath + mImageCursor.getString(mImageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
long imageId = mImageCursor.getLong(mImageCursor.getColumnIndex(MediaStore.Images.Media._ID));
Dlog.d("원본사진위치 : " + mImageCursor.getString(mImageCursor.getColumnIndex(MediaStore.Images.Media.DATA)) );
Cursor cursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(
mGalleryActivity.getContentResolver(), imageId,
MediaStore.Images.Thumbnails.MINI_KIND,
null );
Dlog.d("썸네일 개수 당연히 1일걸 : " + cursor.getCount() );
if( cursor != null && cursor.getCount() > 0 ) {
cursor.moveToFirst();//**EDIT**
while(!cursor.isAfterLast()){
String uri = cursor.getString( cursor.getColumnIndex( MediaStore.Images.Thumbnails.DATA ) );
Dlog.d("썸네일위치 : " + uri );
cursor.moveToNext();
}
cursor.close();
}
...
}