차근차근/Android

MediaScanner 을 APP에서 실행시키기

예쁜꽃이피었으면 2014. 7. 29. 00:40

뭔가 좋아보여서 가져옴

 

 

http://www.androidpub.com/61214

 

안녕하세요.  

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로 얻어서 사용해야 할 듯합니다 ^^

감사합니다. 


반응형