본문 바로가기

Programming/Android

[Android] 사진 저장 후 갤러리에 보이지 않는 경우-MediaScanner

개별 파일로 intent를 통해 리소스 디비 업데이트

이동~~(Click)



이번에는 폴더 전체 스캔, MediaScanner를 통해 업데이트를 해보겠습니다.


이부분도 간단하게 구현가능한데, 범용성을 위해 클래스로 뺐습니다^^;



package com.jhlibrary.util;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;

public class MediaScanner {
	private Context mContext;

	private String mPath;

	private MediaScannerConnection mMediaScanner; 
	private MediaScannerConnectionClient mMediaScannerClient;

	public static MediaScanner newInstance(Context context) {
		return new MediaScanner(context);
	}

	private MediaScanner(Context context) {
		mContext = context;
	}

	public void mediaScanning(final String path) {

		if (mMediaScanner == null) {
			mMediaScannerClient = new MediaScannerConnectionClient() {

				@Override
				public void onMediaScannerConnected() {
					mMediaScanner.scanFile(mPath, null); // 디렉토리
					// 가져옴
				}

				@Override
				public void onScanCompleted(String path, Uri uri) {

				}
			};
			mMediaScanner = new MediaScannerConnection(mContext, mMediaScannerClient);
		}

		mPath = path;
		mMediaScanner.connect();
	}
}


직접 구현의 경우, MediaScannerConnection 클래스를 통해 디비에 접근(?), 


파일 또는 디렉토리 전체에 대한 업데이트를  할 수 있다.


먼저 MediaScannerConnectionClient 를 객체화 해줍니다.

(이 클래스는 MediaScannerConnection에서 callback을 받기 위한 클래스입니다).


그리고  connection을 위한 MediaScannerConnection을 객체화 하면 끝~!



사용하기 위해선 아래처럼 하시면 됩니다.



MediaScanner scanner = MediaScanner.newInstance(MainActivity.this);
scanner.mediaScanning("파일경로");