>> 오디오
오디오의 경우 MediaStore.Audio.Media 에 컨텐츠 정보, MediaStore.Audio.Albums에 썸네일 정보가 저장되어 있다. 앨범별 썸네일을 관리하는 이유는 컨텐츠별 썸네일과의 중복 문제 때문이다.
따라서, MediaStore.Audio.Media 로 컨텐츠 검색 후, MediaStore.Audio.AudioColumns.ALBUM_ID 로 다시 앨범 테이블을 검색해야 원하는 썸네일을 얻을 수 있다.
데이터 취득 절차
이미지 uri를 얻어 바로 불러 오는 형태를 사용하나, 일단 기본 적인 순서는 아래와 같다.
MediaStore.AudioMeida.EXTERNAL_CONTENT_URI에서 MediaStore.Audio.Media를 쿼리해 미디어 정보를 얻음.
커서얻기
context.getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
null);
액티비티 인 경우 managedQuery() 메쏘드를 사용해도 된다.
managedQuery( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null );
커서를 돌며 필요한 정보를 얻고,
id = cursor.getInt( cursor.getColumnIndex( MediaStore.Audio.Media._ID));
album_id = cursor.getInt( cursor.getColumnIndex( MediaStore.Audio.Media.ALBUM_ID));
.
.
Media.Audio.Albums 테이블에서 Media.Audio.Albums.ALBUM_ART 를 select한다.
where 절은 Media.Audio.Albums._ID 와 미디어의 album_id가 일치되는 녀석들.
데이터 값
실제 이미지파일의 path 정보이다. 오디오의 경우 확장자 .jpg가 빠진채로 저장된다.
미디어 스캔시 이미지로 분류되지 않게 하기 위함인듯...
필드명 : MeidaStore.Audio.Albums.ALBUM_ART
/mnt/sdcard/Android/data/com.android.providers.media/albumthumbs/식별번호
URI 만들기
위와 같이 PATH를 취득 하고, 해당 PATH로 데이터를 읽어오는 방법 외에 uri를 통해 바로 이미지를 불러올 수 있다.
직접 불러올 수 있는 메쏘드들을 제공해 주는데, 이를 사용하면 쿼리의 수도 줄고 편리하다. 앨범 id만 알고 있으면 바로 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.Media.EXTERNAL_CONTENT_URI 에서 Media.Video.Media._ID를 select한다.
MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI 에서 MediaStore.Video.Thumbnails.DATA 필드를 select 하도록 쿼리한다. where 절은 미디어id와 MediaStore.Video.Thumbnails.VIDEO_ID 가 같은 녀석으로.
데이터 값
MediaStore.Video.Thumbnails.DATA 에 들어있는 값은 아래와 같다.
/mnt/sdcard/DCIM/.thumbnails/식별번호.jpg
URI
ContentUris.withAppendedId( MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, id);
바로 읽어오기
비디오와 이미지는 thumbnail 클래스가 별도로 존재하므로, 위의 uri 조차도 만들지 않고, 바로 읽을 수 있게 static 메쏘드도 제공해 주고 있다.
Bitmap bmp = MediaStore.Video.Thumbnails.getThumbnail(
resover,
비디오id,
MediaStore.Video.Thumbnails.MICRO_KIND,
options );
>> 이미지
이미지의 미디어는 MediaStore.Images.Media, 썸네일은 MediaStore.Images.Thumbnails 로 구분되어 있다.
데이터 취득 절차
MediaStore.Images.Media.EXTERNAL_CONTENT_URI 로 미디어 ID를 SELECT 하고,
MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI 에서 미디어ID와 MediaStore.Images.Thumbnails.IMAGE_ID가 일치하는 녀석으로MediaStore.Images.Thumbnails.DATA를 쿼리한다.
URI
Uri.withAppendedPath( MeidaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, id );
바로 읽어오기
Bitmap bmp = MediaStore.Images.Thumbnails.getThumbnail(
resorver,
이미지 id,
MediaStore.Images.Thumbnails.MICRO_KIND,
options);
'프로그래밍 > Android' 카테고리의 다른 글
OpenGL 프레임버퍼 사용 (0) | 2011.10.27 |
---|---|
ADB tcp/usb 연결설정 (0) | 2011.10.26 |
sdk3.0 fragment를 하위버전에서 사용하기 (0) | 2011.10.19 |
SurfaceView/GLSurfaceView (0) | 2011.10.11 |
Custom layout, layoutinflater (0) | 2011.10.11 |
뷰의 크기 변경,이동 (0) | 2011.09.23 |
리스트뷰 메쏘드 몇개 (0) | 2011.09.22 |
SQLite Database (0) | 2011.09.20 |
Edittext 관련 사항들 (0) | 2011.09.18 |
MediaStore 오디오 재생목록 (0) | 2011.09.17 |