기타치는 개발자

[Android]미디어 파일 새로고침 관련(MediaScannerConnection) 본문

안드로이드/Android

[Android]미디어 파일 새로고침 관련(MediaScannerConnection)

던킨팬더 2016. 9. 8. 18:00

미디어파일(이미지, 동영상 등 ) 복사/삭제/ 수정 등 작업을하였을때 새로고침하는 방법에 대해서 적어보겠습니다. 


기존에 겔러리 기능이 있는 앱을 만들때 kikat 버전 이전은 

1
2
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
              Uri.parse("file://"+Environment.getExternalStorageDirectory())));
cs


위와 같이 사용하지만 이후 버전부터는 지원하지않습니다. 


MediaScannerConnection 라는 클래스가 존재합니다. 

이클래스는 파일에서 메타 데이터를 읽고 해당 Medis scanner server에 제공하고 MediaScannerConnectionClient 클랫는 새로 검색한 파일의 Uri를 MediaScannerConnection의 클라이언트로 반환하는 미디어 검색 서비스 인터페이스를 제공한다고 설명되어있습니다.

 

내부 동작으로 com.android.providers.media.MediaScannerService 쪽 바인드 서비스를 호출하여 동작하게 되어있습니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class MediaScannerSample implements MediaScannerConnection.MediaScannerConnectionClient {
 
    private Context mContext;
    private String mFilePath;
    MediaScannerConnection mediaScannerConnection;
 
    MediaScannerSample(Context context ) {
        mContext = context;
    }
 
    public void refresh(String filePath){
        mFilePath = filePath;
        mediaScannerConnection.connect();
    }
 
    @Override
    public void onMediaScannerConnected() {
        mediaScannerConnection.scanFile(mFilePath, null);
    }
 
    @Override
    public void onScanCompleted(String path, Uri uri) {
        mediaScannerConnection.disconnect();
    }
}
 
cs

실제 사용 코드는 위와 같습니다.


하지만 파일 여러개일경우 List형식으로 던지는것이 존재하지 않습니다. 

이것에 대해서는 따로 모듈을 만들어 처리하거나 각각의 쓰레드 안에서 처리해야될것 같습니다.