>> 오디오
오디오의 경우 MediaStore.Audio.Media 에 컨텐츠 정보, MediaStore.Audio.Albums에 썸네일 정보가 저장되어 있다.
앨범별 썸네일을 관리하는 이유는 컨텐츠별 썸네일과의 중복 문제 때문이다.
앨범별 썸네일을 관리하는 이유는 컨텐츠별 썸네일과의 중복 문제 때문이다.
따라서, MediaStore.Audio.Media 로 컨텐츠 검색 후,
MediaStore.Audio.AudioColumns.ALBUM_ID 로 다시 앨범 테이블을 검색해야 원하는 썸네일을 얻을 수 있다.
MediaStore.Audio.AudioColumns.ALBUM_ID 로 다시 앨범 테이블을 검색해야 원하는 썸네일을 얻을 수 있다.
데이터 취득 절차
MediaStore.Audio.Media를 쿼리해 미디어 정보를 얻음.
Media.Audio.Albums 테이블에서
Media.Audio.Albums._ID 와 미디어의 MediaStore.Audio.AlbumColumns.ALBUM_ID 로 쿼리
Media.Audio.Albums.ALBUM_ART 필드 사용.
데이터
실제 이미지파일의 path 정보이다. 오디오의 경우 확장자 .jpg가 빠진채로 저장된다.
미디어 스캔시 이미지로 분류되지 않게 하기 위함인듯...
필드명 : MeidaStore.Audio.Albums.ALBUM_ART
/mnt/sdcard/Android/data/com.android.providers.media/albumthumbs/식별번호
직접 접근을 위한 URI 만들기 :
위와 같이 PATH를 취득 해도 되지만, 해당 이미지의 URI를 만들어 직접 불러오면, 쿼리의 수도 줄고 편리하다.
앨범아트는 uri를 제공하지 않으므로, 별도로 생성한다.
앨범아트 uri = Uri.parse("content://media/external/audio/albumart");
앨범아트 uri에 앨범id를 붙여 해당 컨텐츠의 uri 생성( /albumart/앰범 아이디 )
Uri uri = ContentUris.withAppendedId( 앨범아트 uri, 앨범 id );
URI 에서 바로 읽어 오기
ImageView v.stImageURI( uri );
URI 에서 파일로 읽어 오기
ParcelFileDescriptor fd = getContentResolver().openFileDescriptor( uri, "r" );
Bitmap bitmap = BitmapFactory.decodeFileDescrptor( fd.getFileDescriptor(), null , option );
또는,
Bitmap bitmap = Images.Media.getBitmap( mContext.getContentResolver(), uri );
>> 비디오
비디오는 미디어는 MediaStore.Video.Media , 썸네일은 MediaStore.Video.Thumbnails로 구분되어 있다.
미디어에 썸네일 정보가 없으므로, 썸네일 테이블에서 미디어 id로 검색해 봐야 한다.
데이터 취득 절차
MediaStore.Video.Thumbnails.VIDEO_ID, MediaStore.Video.Thumbnails.DATA 필드로 쿼리
VIDEO_ID에 미디어의 _ID가 지정되어 있다.
비디오 데이터(이미지와 같은 위치에 저장)
MediaStore.Video.Thumbnails.DATA
/mnt/sdcard/DCIM/.thumbnails/식별번호.jpg
직접 접근 URI : 비디오의 경우 Thumbnail 에서 uri를 제공하는데, 이곳에 id를 붙여 사용하면 된다.
ContentUris.withAppendedId( MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, id);
URI로 읽어오기
Bitmap bmp = MediaStore.Video.Thumbnails.getThumbnail( ... );