!!!추가
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
갤럭시 s4를 이용해서 안드로이드 프로젝트를 진행하고있다.
그런데 storagestate를 검사하여 저장소를 찾고있는데 toast를 띄워보니깐 경로가
sdcard/emulater/0 으로 뜨는것이 아닌가.
구글링을 통해 해결법을 확인하였다.
우선 루트 dir이 저렇게 뜨는 이유는 jellybean이상의 버전부터는 저장소로 접근하는 명령어가 여러 종류가 되면서 저런 방식으로 바뀌었다고 한다.(?)
그래서 다음과 같은 해결법을 얻게 되었다.
//클래스 전역변수
private final String rootFolderName = "/MemoWithREC";
private final String memoListFolderName = "/MemoList/";
public static String root = null; //메모를 저장하는 폴더의 root dir
public static String memoRoot = null; //메모를 저장하는 폴더 dir
//dir init
String sdcard= Environment.getExternalStorageState();
if( ! sdcard.equals(Environment.MEDIA_MOUNTED) ) {
//SD카드 UNMOUNTED
Log.d("mstag","sdcard unmounted");
root = "" + Environment.getRootDirectory().getAbsolutePath() + rootFolderName; //내부저장소의 주소를 얻어옴
} else {
//SD카드 MOUNT
Log.d("mstag","sdcard mounted");
root = "" + Environment.getExternalStorageDirectory().getAbsolutePath() + rootFolderName; //외부저장소의 주소를 얻어옴
}
Log.d("mstag","root dir is => "+root);
memoRoot = root + memoListFolderName;
File rootCheck = new File(root);
if( ! rootCheck.exists() ) { //최상위 루트폴더 미 존재시
rootCheck.mkdir(); Log.d("mstag","root make");
rootCheck = new File(memoRoot);
if( ! rootCheck.exists() ) { //하위 메모저장폴더 미 존재시
rootCheck.mkdir(); Log.d("mstag","root-son make");
}
}
Environment에서 제공하는 media_mounted상수와 현재 외부저장소의 상태를 equals로 비교해서 sd카드 유무를 나눠서 dir을 얻는다.
'소프트웨어 > Android/Java/Ndk' 카테고리의 다른 글
Android] Handler사용법 (0) | 2013.11.03 |
---|---|
Wifi 검색 샘플 소스 (0) | 2013.11.03 |
안드로이드] 액션바 (0) | 2013.09.27 |
안드로이드] 안드로이드 외부저장소 쓰기 권한 (0) | 2013.09.27 |
wifi direct관련 문서 (0) | 2013.09.08 |
안드로이드] listview의 배경이 계속 검정색으로 변할때 (0) | 2013.08.04 |
자바] split사용사 '.' 사용 (split dot) (0) | 2013.08.01 |