2019.10.29
안드로이드 Q부터 Storage정책이 변경되었습니다.
우선 기존 Q 이전에서는 어떻게 적용되었는지, Q 이후에는 어떻게 적용되는지 살펴보겠습니다.
● Android Q 이전
개별 앱만 접근 가능
외부 저장소 권한이 있으면 누구나 접근이 가능
- READ_EXTERNAL_STORAGE
- WRITE_EXTERNAL_STORAGE
● Android Q 이후
샌드박스 저장공간
- 개별 앱만 접근 가능
- 읽고 쓰기 위한 별도의 권한 필요 없음
- Context.getExternalFilesDir(...)
- 앱 삭제 시 함께 삭제됨
- 앨범 아트, 썸네일 등 다른 앱과 공유할 필요가 없는 미디어 파일은 샌드박스 공간을 활용
공용 저장공간
- MediaStore.Audio
- MediaStore.Video
- MediaStore.Images
- 별도 권한 없이 파일 생성 가능
- 외부 저장소 권한으로 다른 앱이 생성한 파일 접근 가능
다운로드 저장공간
- MediaStore.Downloads
- 별도 권한 없이 파일 생성 가능
- 시스템 파일 선택기를 통해서만 다른 앱이 생성한 파일 접근 가능
● Scoped mode
원활한 Migration을 위해 Scoped mode 적용 여부를 선택할 수 있는 플래그를 Manifest.xml파일에서 아래와 같이 제공하고 있습니다.
<application android:requestLegacyExternalStorage="true">
다음 Android 버전(Android 11 / R)에서는 Target SDK 버전과 관계없이 모든 앱에 Scoped mode를 적용될 예정입니다.
단, 개발 앱의 Scoped mode 여부는 앱 설치 시 정해지며, 이후 변경되지 않습니다.
그럼 이제 코드로 비교해보겠습니다. (다음 예제는 Button을 통해 화면 스크린샷을 찍는 Sample입니다.)
다음 코드는 Android Q 이전에서 이미지 파일을 저장하는 예제입니다.
다음 코드는 Android Q 이후에서 이미지 파일을 저장하는 예제입니다.
참고
https://developer.android.com/preview/privacy/scoped-storage#java
https://developer.android.com/preview/features?hl=ko#create-files-external-storage
https://codechacha.com/ko/android-q-scoped-storage/
https://codechacha.com/ko/android-mediastore-insert-media-files/
감사합니다.
'Android' 카테고리의 다른 글
[Android] View에 대해서 알아보자 - ViewLifeCycle (0) | 2019.11.26 |
---|---|
[Android] Mac에서 Android SDK Path 설정 및 무선 ADB 연결 (0) | 2019.11.17 |
[Android] MediaController dispatchKeyEvent not called (0) | 2019.10.22 |
[Android] Gradle Dependency Conflict문제 해결하기 (0) | 2019.10.18 |
[Android] ViewHolder패턴을 활용한 Base ListView 만들기 (0) | 2019.09.20 |