안드로이드 10이전 Legacy Storage 활용
내부저장소 사용하기
안드로이드 10 이전 LegacyStorage를 사용할 때 내부저장소에 접근할 때는 권한이 필요 없습니다.
그리고 앞의 글에서 이야기했듯이 안드로이드 10 이전과 이후, 내부저장소의 개념은 달라진게 없습니다.
따라서 해왔던 것처럼
getFilesDir() : 내부저장소의 앱 개별 공간 경로
getCacheDir() : 내부저장소의 임시 캐시파일 저장소 경로
위 2개의 함수를 사용하여 앱의 내부저장소에 접근하면 됩니다.
외부저장소 공유공간 사용하기
외부저장소의 공유공간에 접근해봅시다.
Legacy Storage에서는 외부저장소에 접근하기 위해서 권한이 필요합니다.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
위와 같이 manifest.xml 파일에 권한을 선언해줍니다.
참고로 Legacy Storage에서는 WRITE_EXTERNAL_STORAGE 권한만 있으면 외부저장소에 접근 가능합니다.
한 마디로 보안이 취약하다는 뜻입니다.
그 다음 외부저장소가 사용가능한지 getExternalStorageState() 함수를 호출하여 확인합니다.
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
이제 외부저장소 공유공간 경로를 가져오겠습니다.
getExternalStorageDirectory() 또는 getExternalStoragePublicDirectory(String type) 함수를 사용하면 됩니다.
getExternalStorageDirectory() 는 외부저장소 SD카드(빌트인)의 최상위 경로를 반환합니다.
getExternalStoragePublicDirectory(String type) 는 외부저장소의 공유디렉터리 경로를 반환합니다.
아래는 예시입니다.
//폴더 저장 경로
public static final String STRSAVEPATH = Environment.getExternalStorageDirectory() + "/MyDirectory/";public static final String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();
getExternalStoragePublicDirectory() 함수의 매개변수로 던져줄 String타입의 type 변수의 종류는 아래와 같습니다. null을 넘겨주는 것도 가능합니다.
외부저장소 앱 개별공간 사용하기
외부저장소의 앱 개별공간을 사용하고 싶을 때는 getExternalStorageDirectory() 와 getExternalStoragePublicDirectory(String type) 함수대신 getExternalFilesDir(String type) 함수를 사용하면 됩니다.
나머지는 똑같습니다.
이 경우 앱 개별공간이기 때문에 앱을 삭제하면 외부저장소의 앱 개별공간에 있던 파일들도 사라지게 됩니다.