Scoped Storage

2021. 6. 3. 14:17Android/Contents

- 외부저장소의 보안과 파일 관리의 효율을 위해 기존 형태에서 공용공간이 사진/동영상/음악/다운로드 4개의 분할된 공간으로 제공하며, 개별 앱 공간을 샌드박스 형식으로 타앱에서 접근이 불가하게 만들어 놓음

- 따라서, 공용공간에 앱에서 디렉터리를 생성해 파일을 저장해놓는 형태였다면, 개별 앱공간으로 해당 파일들에 대한 마이그레이션(파일 이동)이 필요함(왜냐하면, 4개의 분할된 공간으로만 제공되기 때문에 접근 통로를 잃어버려 해당 환경의 파일에는 접근이 불가하게 되기 때문에)

  • 이미지 - 사진 및 스크린샷을 포함하며, DCIM/  Pictures/ 디렉터리에 저장됩니다. 시스템은 이러한 파일을 MediaStore.Images 테이블에 추가합니다.
  • 동영상 - DCIM/, Movies/  Pictures/ 디렉터리에 저장됩니다. 시스템은 이러한 파일을 MediaStore.Video 테이블에 추가합니다.
  • 오디오 파일 - Alarms/, Audiobooks/, Music/, Notifications/, Podcasts/  Ringtones/ 디렉터리에 저장된 오디오 파일과 Music/ 또는 Movies/ 디렉터리에 있는 오디오 재생목록이 포함됩니다. 시스템은 이러한 파일을 MediaStore.Audio 테이블에 추가합니다.
  • 다운로드한 파일 - Download/ 디렉터리에 저장됩니다. Android 10(API 수준 29) 이상을 실행하는 기기에서는 이러한 파일이 MediaStore.Downloads 테이블에 저장됩니다. Android 9(API 수준 28) 이하에서는 이 테이블을 사용할 수 없습니다.

 

Environment.getExternalStorageDirectory() 디렉토리 생성 가능 여부(외부 저장소 쓰기 권한 부여된 상태)

- requestLegacyExternalStorage none

  targetSDK 28 targetSDK 29 targetSDK 30
Pie Y Y Y
Qos Y N N
Ros Y N N

- requestLegacyExternalStorage true

  targetSDK 28 targetSDK 29 targetSDK 30
Pie -
(requestLegacyExternalStorage
대상 아님)
Y Y
Qos -
(requestLegacyExternalStorage
대상 아님)
Y Y
Ros -
(requestLegacyExternalStorage
대상 아님)
Y N

 

 

참고>

Environment.getExternalStorageDirectory() : /sdcard or /storage/emulated/0

Context.getExternalFilesDir(null) : /sdcard/Android/data/[PACKAGE NAME]/files or /storage/emulated/0/Android/data/[PACKAGE NAME]/files

 

Device File Explorer 위치