* MediaScannerConnection 이용

private MediaScannerConnectionClient client = new MediaScannerConnectionClient(){
        public void onMediaScannerConnected() {
            mediaScanner.scanFile(path, mimetype);
        }

        public void onScanCompleted(String path, Uri uri) {
mediaScanner.disconnect();
        }
};

MediaScannerConnection mediaScanner = new MediaScannerConnection(context.getApplicationContext(), client);
mediaScanner.connect();

이건 원하는 파일을 scanning 할 수 있다.
그리고 MediaScannerConnection 의 첫번째 인자로 Context가 들어가는데 ApplicationContext를 넣어줘야 connect가 되더라;
이거때문에 삽질;;

기존의 content가 삭제된 경우는 scan한다고 해서 기존의 content가 db에서 제거되지 않기때문에
content uri를 얻어와서 provider를 통해 직접 delete를 호출해 줘야 한다.
(scan한다음 넘어오는 uri 사용, scan 안한다면 where문 잘써서 query 날려~)

* 구찮으니 통째로 Sanning!!

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

media mount action을 새로 보내버리는 것이다.
그럼 다시 scanning을 하기때문에 파일을 이동시킨경우 삭제된 것 까지 처리가 쉽게 되버린다~
하지만 비효율적이니;

이를 수행하고 나면 아래와 같은 log를 볼수 있다.

D/MediaScannerService(  181): start scanning volume external
D/MediaScanner(  181):     scan time: 111ms
D/MediaScanner(  181): postscan time: 59ms
D/MediaScanner(  181):    total time: 687ms
D/MediaScannerService(  181): done scanning volume external


저작자 표시 비영리 변경 금지
Posted by 유야

댓글을 달아 주세요

  1. 게으른넘 2010/03/15 17:31  댓글주소  수정/삭제  댓글쓰기

    글 제목 sanning -> scanning 인듯;;
    아님 말고;;