마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

미디어 DB에서 썸네일 가져오기(미디어DB 조인)

0 추천

안녕하세요. 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();
                }
...
}

 

치솟음 (3,710 포인트) 님이 2016년 3월 7일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...