일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JSON
- 마이바티스
- Linux
- Server
- 오라클
- db
- Javascript
- 디비버
- 보안
- Tomcat
- Eclipse
- 자바스크립트
- 자바
- JQuery
- 모바텀
- git
- IntelliJ
- SQL
- mybatis
- Redis
- HTTP
- svn
- java
- 자바문법
- 인텔리제이
- 톰캣
- 이클립스
- DBeaver
- oracle
- 상태코드
- Today
- Total
JongTachi의 개발 블로그
Android Storage 본문
안드로이드 저장소에 대해 말하기 앞서 안드로이드 저장소는 Q(api29)이전 버전과 Q(api29)이후 버전으로 나뉜다는 것을 알아두자.
version < api29 -> Legacy Storage
vesion > api29 -> Scoped Storage
안드로이드에서는 저장소를 내부저장소와 외부저장소로 나눠서 관리하고 있다. Legacy Storage와 Scoped Storage의 차이는 외부저장소의 차이인데 어떤점이 달라졌는지 천천히 살펴보자
1. Legacy Storage (Q 이전 버전)
1) 내부저장소 : 내부저장소는 모든 스마트폰에서 제공된다. 앱을 설치하게 되면 해당 앱을 위한 저장공간이 할당된다. 이 공간은 샌드박스 형식으로 되어있어서 해당 앱만 접근 가능하고 외부에서는 볼 수 없는 형태이다. 앱이 삭제되면 이 공간 또한 같이 제거된다.
2) 외부저장소 : 대부분 안드로이드 기기는 내부저장소 뿐만 아니라 외부저장소도 갖고있다. SD카드와 같이 이동식 저장장치로 제공되기도 하고 내부, 외부 파티션을 나눠 저장공간을 제공하는 경우도 있다. 하지만 모든 기기에서 제공되는 것이 아니므로 이를 확인하는 코드를 작성하여 확인해야한다.
그럼 내부 저장소가 있는데 왜 외부 저장소가 있는걸까? 이유는 다음과 같다
- 더 큰 메모리와 디스크 공간의 필요
- 다른 앱에서 현재 앱의 데이터를 Access하기 위해
- 앱이 지워져도 데이터를 기기에 저장해놓기 위해(예를 들면 앱에서 다운 받은 사진들)
3) 내부저장소 사용하기
내부저장소는 따로 권한이 필요하지 않는다. Context.getFileDir() 또는 getCacheDir()로 저근해서 사용할 수 있습니다. 경로는 /data/data/com.example.appname이고 캐시의 경우는 /data/data/com.example.appname/cache가 된다.
4) 외부저장소 사용하기
안드로이드에서 제공하는 외부저장소에 접근하기 위한 API들이다. (참고로 안드로이드 버전 10(Q) 이전까지 사용해온 API이니 참고만 하길 바람.
- Encironment.getExternalStorageDirectory() : 기본 외부저장소(SD카드)의 최상위 경로를 리턴한다.
- Context.getExternalFilesDir(String type), Context.getExternalCacheDirs(), Context.getExternalMediaDirs() : 앱 내부에서만 사용될 private 디렉토리의 절대경로를 리턴함. 앱이 삭제되면 같이 사라짐. Context.getExternalFilesDir(String type)은 아래 타입으로 사용가능. 파라미터가 null이면 루트 디렉토리를 반환하거나 아래 주어진 타입의 서브 디렉터리를 반환한다.
- Environment.DIRECTORY_MUSIC : 음악 파일 저장
- Environment.DIRECTORY_PODCASTS : 팟캐스트 파일 저장
- Environment.DIRECTORY_DOWNLOADS : 다운로드한 파일 저장
- Environment.DIRECTORY_ALARMS : 알람으로 사용할 오디오 저장
- Environment.DIRECTORY_NOTIFICATIONS : 알림음 오디오 저장
- Environment.DIRECTORY_PICTURES : 그림 파일 저장
- Environment.DIRECTORY_MOVIES : 영상 파일 저장
- Environment.DIRECTORY_DCIM : 사진 파일 저장
- Environment.getExternalStoragePublicDorectory(String type) : 공유 가능한 디렉토리를 리턴한다. 앱이 삭제 되어도 파일은 유지된다. 이곳에 파일을 저장하려면 WRITE_EXTERNAL_STORAGE 권한을 요청해야한다. type은 위에 나열된 타입과 똑같이 사용할 수 있지만 null은 넣을 수 없다.
5) 저장소 사용방법 요약본
파일위치 | 권한 | 접근 | 앱 삭제시 제거 | |
내부저장소 | 개별 앱 공간 | 필요 없음 | Context.getFilesDir() | Y |
외부저장소 | 개별 앱 공간 | 필요 없음 | Context.getExternalFilesDir() | Y |
공용공간 | WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE | Environment.getExternalStoragePublicDirectory() 또는 MediaStore | N |
'Android' 카테고리의 다른 글
All of Fragment (0) | 2022.06.20 |
---|---|
Service Life_Cycle (0) | 2022.06.06 |
Android Activity-LifeCycle (0) | 2022.05.19 |
Android 구조 (0) | 2022.05.18 |