안녕하세요. 

Soul Movie 라는  자막지원 Movie Player를 올렸는데요.

peterleem 님이   모토롤라 드로이드 폰에는  
Dev Tools - Media Scanner 가  메뉴가 없다고 하더군요.

그래서 이 기능을 넣어 달라고 하였는데요.


드로이드 폰에  Media Scanner 메뉴가 없다면  어디선가  이 작업을 하고 있을 것이고,

그렇다면,  Media Scanner 기능을  APP에서 호출해서 강제로  수행하도록 할 수 있다는 것이 되지요.


그래서, 오늘  이것과  관련에서 구글을 검색해 보니까,
방법이 있기는 하더군요.




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


이렇게  코드를 넣어주면   되더군요. 


01-05 12:42:36.138: DEBUG/MediaScannerService(163): start scanning volume external
01-05 12:42:36.439: INFO/ActivityManager(56): Displayed activity com.bolero.texttest/.TextTest: 35937 ms (total 35937 ms)
01-05 12:42:36.889: DEBUG/dalvikvm(163): GC freed 5745 objects / 337656 bytes in 166ms
01-05 12:42:37.368: DEBUG/MediaScanner(163):  prescan time: 774ms
01-05 12:42:37.368: DEBUG/MediaScanner(163):     scan time: 225ms
01-05 12:42:37.368: DEBUG/MediaScanner(163): postscan time: 25ms
01-05 12:42:37.377: DEBUG/MediaScanner(163):    total time: 1024ms
01-05 12:42:37.377: DEBUG/MediaScannerService(163): done scanning volume external

화면  UI는  아무것도 안 뜨는데요.

LogCat을 보면  위 처럼   MediaScanner 가 실행되어 스캔을 자동으로 완료 하더군요.


UI 처리를 위한 코드도 찾았습니다.


sendBroadcast 를  호출하기 전에 

        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);
        intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
        intentFilter.addDataScheme("file");
        registerReceiver(mReceiver, intentFilter);

위 코드처럼   리시버를 등록해 놓으면 되더군요.

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
                mTitle.setText("Media Scanner started scanning " + intent.getData().getPath());    
            }
            else if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
                mTitle.setText("Media Scanner finished scanning " + intent.getData().getPath());    
            }
        }
    };






덤으로 얻은   정보는 

Environment.getExternalStorageDirectory()

이것을  외부저장장치의  디렉토리를  돌려주는  API 같더군요.


현재는  대부분  /sdcard 를  사용하는 거 같지만,
제조사에 따라  마운트하는 디렉토리 이름이 바뀔 수도 있을 텐데요.

외부저장장치 디텍토리는 저 API로 얻어서 사용해야 할 듯합니다 ^^

감사합니다.