차근차근/Android

ACTION_MEDIA_MOUNTED

예쁜꽃이피었으면 2014. 9. 18. 15:02

http://regularmotion.kr/tag/intent-action_media_mounted/


[ANDROID] FILE을 추가한 뒤 플랫폼에 NOTI를 주는 INTENT.

Android는 추가한 File을 MediaPlayer나 Gallery에서 인식하지 못하는 경우가 종종 발생한다.

위와 같은 증상이 발생하는 이유는 Android는 Media File을 DB로 관리를 하는데 

(Audio는 Audio DB에 Video는 Video DB) File은 추가 되었지만 File Format에 맞는 

DB에 아직 추가가 되지 않았기
 때문이다.

Media File을 DB에 추가하도록 Android Platform에 알려주는 방법으로는

1) mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(“file://”+ Environment.getExternalStorageDirectory())));

를 이용하여 SD Card 전체에 대해서 Media Scan 작업을 수행하는 방법이 있고

추가한 File에 대해서는 Media Scan 작업을 수행하는 방법이 있다.

2) Uri uri = Uri.parse(“file://” + path);

Intent i = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 

i.setData(uri);

sendBroadcast(i);

추가한 File의 경로를 알고 있을 때는 2)번 방법을 사용하는 것이 속도면에서나 다른 작업에 

지장을 주지 않는 면에서나 권장하는 방법이고

추가된 File의 경로를 알 수 없을 때에는 1)번 방법을 사용하여야 한다.

만약 웹에서 다운 받았거나, USB 케이블을 통해 추가한 파일이 갤러리나 Media Player에서 나오지 않을 떄는

안드로이드 마켓에서 SdSync앱을 다운받아 사용해보시는 것을 권장한다!




http://aroundck.tistory.com/211

안녕하세요 돼지왕 왕돼지입니다.
오늘은 SD-Card ( External Storage ) 의 mount, unmount, media scanner 등의 상태 변화를 감지하는 법을 알아보겠습니다.

 액션설명 
ACTION_MEDIA_MOUNTED   마운트됨. 마운트 경로는 인텐트의 mData 필드로 조사, 
read-only 값은 읽기 전용미디어인지 조사
ACTION_MEDIA_UNMOUNTED   언마운트   
ACTION_MEDIA_EJECT   
사용자가 외부 미디어 제거 명령
응용 프로그램은 모든 열려진 파일 닫아야 함  
ACTION_MEDIA_REMOVED외부 미디어가 제거됨   
ACTION_MEDIA_NOFS   인식 못하는 파일 시스템이거나 빈 미디어   
ACTION_MEDIA_SCANNER_STARTED   미디어 스케너가 스캔 시작   
ACTION_MEDIA_SCANNER_FINISHED   미디어 스캔 종료   
ACTION_MEDIA_SCANNER_SCAN_FILE   파일 검색했으며 DB에 파일 추가   



포인트는 dataScheme을 "file"로 설정해야만 제대로 수신된다는 것!



<Code>

public void onResume(){
   super.onResume();
 
   IntentFilter filter = new IntentFilter();
   filter.addAction(Intent.ACTION_MEDIA_MOUNTED);
   filter.addAction(Intent.ACTION_MEDIA_REMOVED);
   filter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
   filter.addAction(Intent.ACTION_MEDIA_EJECT);
   filter.addAction(Intent.ACTION_MEDIA_NOFS);
   filter.addDataScheme("file");
   registerReceiver (mBRSdcard, filter);
}
 
public void onPause(){
   super.onPause();
   unregisterReceiver(mBRSdcard);
}
 
BroadcastReceiver mBRSdcard = new BroadcastReciever(){
   int count = 0;
   public void onRecieve (Context context, Intent intent){
      String action = intent.getAction();
      count++;
      String str = "Location : " + intent.getData();
      if (action.equals(Intent.ACTION_MEDIA_MOUNTED)){
         boolean readonly = intent.getBooleanExtra("read-only", false);
      }
      ...
   }
}

 

 <Manifest>

<receiver android:name=".BRclass">
   <intent-filter>
      <action android:name="android.intent.action.MEDIA_MOUNTED"/>
      <data android:scheme="file"/>
   </intent-filter>
</receiver>


반응형