attached to post

TIL - 11 # 안드로이드 저장소 Android 11 (Q, API 30)이상 부터 기존 외부 저장소에 public 한 저장소가 사라지고 직접적인 접근이 안되며, 대신에 Scoped Storage라는 것이 생겼습니다. 앞으로 어떻게 이미지 및 파일에 접근을 해야되는지 정리 해보겠습니다. ## 안드로이드 P 이하의 버전 안드로이드 P 이하의 버전에서, 외부 저장소에는 아래와 같은 폴더로 구분할 수 있었습니다. - 앱 데이터 폴더 : /storage/Android/data/[앱 package name] - 공용 폴더(DCIM, Pictures 등) : /storage/[폴더이름] 여기서 앱 데이터 폴더 같은 경우는 외부 앱에서 적절한 권한이 있는 경우 디렉터리에 액세스할 수 있지만 디렉터리에 저장된 파일은 개발자의 앱에서만 사용하게 되어 있으며, 앱 삭제 시 사라지는 특징이 있습니다. 공용 폴더는 모든 앱에서 접근이 가능하며, 이 폴더에 읽거나 쓰기 위해서, `READ_EXTERNAL_STORAGE` 또는 `WRITE_EXTERNAL_STORAGE` 권한을 얻을 필요가 있습니다. 간단하게 앱 간 파일 공유가 쉬운 이점이 있었지만, 다른 앱들이 파일 정보들을 확인하고 악용할 수 있는 잠재적인 위험성을 가지고 있었습니다. 따라서 “Scoped Storage” 라는 개념이 나왔습니다. ## 안드로이드 Q 이상 안드로이드 Q 이상 부터는 내부저장소의 경우에는 이전과 유사한 방식으로 동작되지만, 외부 저장소의 경우에는 사진 및 동영상, 음악, 다운로드라는 공용 공간이 따로 생겼습니다. 또한 개별 앱 공간은 “EXTERNAL_STORAGE” 권한으로 자신의 앱이 아닌 다른 개별 앱 공간을 마음대로 읽고 쓸 수 없게 됐습니다. 사진 및 동영상, 음악과 같은 공용 공간은 “READ_EXTERNAL_STORAGE”권한을 사용하여 “MediaStore”을 통해서만 읽을 수 있습니다. 추가 권한이 없이도 각 공용 공간에 파일을 생성하고, 자신이 생성 한 파일을 읽을 수 있으며, 앱 삭제 시 앱이 소유한 파일이 삭제됩니다. (메타 데이터 추가시 유지 가능) 다운로드 폴더 등을 접근할 떄는 SAF(Storage Access Framework)을 이용해야 하며, 해당 기능은 Android Lollipop부터 소개 되었습니다. 다운로드 공간은 타입 제한이 없지만 다른 공간은 각 타입에 맞는 파일만 저장이 가능합니다. ## TargetSDK 33 이상 기존에 “READ_EXTERNAL_STORAGE” 권한만 적용되면 이미지 및 사진, 동영상, 오디오 파일에 대한 권한이 모두 사라지게 됩니다. 따라서 “READ_MEDIA_IMAGES”, “READ_MEDIA_VIDEO”, “READ_MEDIA_AUDIO”에 대한 권한들을 Manifest 파일에 선언 및 런타임으로 퍼미션을 체크해줘야 합니다. ## Android 13에서 새로 등장한 Photo Picker Android 13 부터에서는 권한 없이 이미지 및 비디오를 선택할 수 있는 Photo Picker가 새로 나왔습니다 https://developer.android.com/training/data-storage/shared/photopicker?hl=ko 해당 문서를 참고해서 사용해보시는 것을 추천합니다. 참고 - https://developer.android.com/training/data-storage?hl=ko - https://brunch.co.kr/@huewu/8 - https://codechacha.com/ko/android-q-scoped-storage/

콘텐츠를 더 읽고 싶다면?
원티드에 가입해 주세요.
로그인 후 모든 글을 볼 수 있습니다.
댓글 4