[ android] MediaScannerConnection.scanFile
이미지의 썸네일 경로 구하기.
바로 scanFile이란 녀석이 그걸 해준다. 작업이 완료되면 onScanCompleted를 호출된다.
Uri를 통해서 이미지의 ID를 구하고 ID를 가지고 썸네일에 대한 정보를 구한다.
이렇게 해서 이미지에 대한 원하는 정보를 가져올 수 있다. :)
내가 사진을 찍었을 경우 이 사진에 대한 썸네일을 구하고자 할 때가 있다.
이런 경에는 MediaScanner가 이 사진을 스캔하도록 해야 한다.
바로 이 때 내가 원하는 특정파일에 대한 작업을 수행하도록 할 수 있다.
- void processNewPicture( String path ){
- if( path.length() <= 0 )
- return;
- MediaScannerConnection.scanFile(
- this,
- new String[] { path },
- null,
- new MediaScannerConnection.OnScanCompletedListener() {
- public void onScanCompleted(String path, Uri uri) {
- mLastPictureUri = uri;
- mLastPicturePath = path;
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- getImageInfo( mLastPictureUri);
- }
- });
- }
- });
- }
바로 scanFile이란 녀석이 그걸 해준다. 작업이 완료되면 onScanCompleted를 호출된다.
바로 여기서 이미지에 대한 정보를 구하면된다.
Uri가 주어졌으니 Uri를 이용하여 파일에 대한 정보를 Provider에 요청해서 구할 수가 있다.
- private void getImageInfo( Uri uri ){
- String[] proj = {
- MediaStore.Images.Media._ID,
- MediaStore.Images.Media.MINI_THUMB_MAGIC
- };
- String[] PROJECTION = new String[] {MediaStore.Images.Media._ID, MediaColumns.DATA};
- Cursor imageCursor = managedQuery( uri, proj, null, null, null);
- long imageId = -1 ;
- if (imageCursor != null && imageCursor.moveToFirst()){
- int imageIDCol = imageCursor.getColumnIndex( MediaStore.Images.Media._ID );
- imageId = imageCursor.getLong(imageIDCol);
- }
- imageCursor.close();
- String[] THUMB_PROJECTION = new String[] {
- BaseColumns._ID ,
- Images.Thumbnails.DATA
- };
- Uri thumbUri = Images.Thumbnails.EXTERNAL_CONTENT_URI;
- ContentResolver cr = getContentResolver();
- Cursor c = cr.query(thumbUri, THUMB_PROJECTION,
- Thumbnails.IMAGE_ID + "=?",
- new String[]{String.valueOf(imageId)}, null);
- try {
- if (c.moveToNext()) {
- long id = c.getLong(0);
- int dataId = c.getColumnIndex( Images.Thumbnails.DATA);
- String strThumPath = c.getString(dataId);
- Log.d(TAG, "id = " + id );
- Log.d(TAG, "strThumPath = " + strThumPath );
- }
- } finally {
- if (c != null) c.close();
- }
- }
이지의 썸네일 경로가 아닌 Bitmap을 구하자 한다면 getThumbnail 을 이용한다.
- Bitmap bmp =
- Images.Thumbnails.getThumbnail(
- getContentResolver(),
- imageId,
- Images.Thumbnails.MICRO_KIND,
- null );
끝.