앱을 개발하다 보면 미디어 스캐닝을 강제로 하고 싶은 경우가 있다.

네트웍에서 음원이나 사진을 다운받았는 데 뮤직이나 갤러리에서 표시가 안되는 경우가 그렇다.


미디어 스캐너에게 파일정보가 업데이트가 되었다는 인텐트를 보낸다.


sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://" + path)));




아래 내용은 KitKat부터 사용 불가합니다. 

미디어 스캐닝이 너무 자주 불려 성능저하를 일으키는 문제로 앱단에서 호출하지 못하도록 되었습니다.

여하튼 KK 이전 버전이라면...


이럴 때는 아래처럼 인텐트를 하나 날려주자.

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://" + Environment.getExternalStorageDirectory())));


adb로 바로 미디어 스캐닝을 하고 싶다면 이렇게..

(URI 부분을 file:///storage하면 전체 storage에 대해 스캐닝을 수행함)

adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED

file:///storage/sdcard0


YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. taehee 2013.07.13 17:52  댓글주소  수정/삭제  댓글쓰기

    안녕하세요
    질문 하나 드려도 괜찮을까요???

    sendBroadcast메시지를 가져다가 써보니 에러가 나오는데요
    -------------------------------------------------------
    The method sendBroadcast(android.content.Intent) in the type ContextWrapper is not applicable for the arguments (Intent).

    2 quick fixes available:
    Change to 'sendStickyBroadcast(..)'
    Create method 'sendBroadcast(Intent)'
    --------------------------------------------------------------------

    따로 메서드를 만들어야 하나요???
    sendBroadcast메시지를 어디에다 써야되는 지 사실 잘 모르겠는데..
    알려주시면 감사하겠습니다.

  2. dextto™ 2013.07.17 23:03 신고  댓글주소  수정/삭제  댓글쓰기

    sendBroadcast() 메쏘드는 Context클래스에 정의된 abstract 함수지요.
    http://developer.android.com/reference/android/content/Context.html#sendBroadcast(android.content.Intent) 참고

    그래서 Context를 상속받은 클래스에서 사용가능합니다.
    Activity, Service 등등...

    아니면 context 객체를 직접 가지고 있다면, context.sendBroadcast() 이렇게 쓰셔도 되구요. :)

  3. DoDoDo 2013.10.10 17:52  댓글주소  수정/삭제  댓글쓰기

    제가 batch파일에 3G 정도 되는 4개 directory를 (각 directory별 비디오/mp3/사진 등) push한 후 adb 명령어로 "MEDIA_MOUNTED" 해주었습니다.
    그러나 작은 몇개 파일 없는 directory만 갤러리에서 보여지고 나머지는 my files에는 있는데 갤러리에서 보여지지가 않네요.. 혹시 스캐닝의 제한이 있을까요?

    • dextto™ 2013.12.22 22:02 신고  댓글주소  수정/삭제

      가지고 계신 휴대폰의 파일 시스템에서 경로가 달라서 그럴지도 모르겠네요. 마지막 인자를 file:///storage 로 해 보셨나요?