안녕하세요.
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로 얻어서 사용해야 할 듯합니다 ^^
감사합니다.
좋은 정보 너무 감사합니다.^^ 많은 도움이 되었습니다.~