http://www.androidpub.com/554233
android.os.Environment.getExternalStorageDirectory() --> /sdcard 가 넘어옵니다.
갤럭시S는 /sdcard 가 internal sdcard path 입니다.
http://www.androidpub.com/1711936
레퍼런스 가이드 보면.. 다음과 같이 정의되어있네요.
http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
API Level 7 이하는
getExternalStorageDirectory()
API Level 8 이상은
getExternalFilesDir()
http://androi.tistory.com/m/post/86
http://fimtrus.tistory.com/88 - [Android] 사진 저장 후 갤러리에 보이지 않는 경우.
http://www.masterqna.com/android/18853/api%EB%A0%88%EB%B2%A8%EB%B3%84-sd%EC%B9%B4%EB%93%9C-%EA%B2%BD%EB%A1%9C-%EA%B5%AC%EB%B6%84%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
http://googledevkr.blogspot.kr/2014/01/no-writing-to-secondary-storage.html
http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=947
안드로이드에서 동영상 목록을 뿌려주려고 Cursor 객체를 받아오려는데
managedQuery(Uri, String[], String, String[], String) 함수를 사용하려고 했더니 다음과 같은 deprecated되었다는 경고메시지가 떴다.
The method managedQuery(Uri, String[], String, String[], String) from the type Activity is deprecated
그냥 사용 가능하지만 거슬리기때문에 수정할 필요가 있겠다.
(Activity를 상속한 클래스 내에서라면) 경고메시지를 없애기 위해 다음의 메소드로 변경해주면 된다.
물론 여기서, 메소드 호출할 때의 파라미터는 각자의 용법에 맞게 고쳐 쓰도록 한다.
getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
이 메소드의 원형은 다음과 같다.
Cursor android.content.ContentResolver.query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
http://giantsleepping.tistory.com/115
http://linsoo.co.kr/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%EC%97%90%EC%84%9C-sdcard%EC%97%90-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%A0%80%EC%9E%A5%ED%96%88%EB%8A%94%EB%8D%B0-%EA%B0%A4%EB%9F%AC%EB%A6%AC%EC%97%90-%EC%95%88%EB%82%98%EC%98%AC%EB%95%8C
-안드로이드에서 sdcard에 이미지 저장했는데 갤러리에 안나올때
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ 경로)));
http://www.masterqna.com/android/21556/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%82%B7%EC%BA%A3-4-4
ACTION_MEDIA_MOUNTED 대신 MediaScannerConnection 또는 ACTION_MEDIA_SCANNER_SCAN_FILE 을 이용하라는군요 .
원문 : http://commonsware.com/blog/2013/11/06/android-4p4-permission-regressions.html
MediaScannerConnection 에 대한 사용방법은 링크 걸어드리겠습니다. 답변중에 추천수가 제일 많은 것으로 시도해보시기 바랍니다.
http://stackoverflow.com/questions/4646913/android-how-to-use-mediascannerconnection-scanfile
http://www.androidpub.com/61214
MediaScanner 을 APP에서 실행시키기
안녕하세요.
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로 얻어서 사용해야 할 듯합니다 ^^
감사합니다.
http://arabiannight.tistory.com/112 - 안드로이드/Android BroadCastReceiver 란?