이전에 임시로 피드를 올리는 화면에서 SAF(Storage Access Framework)를 통해 구현한적이 있었는데 uri가 유지되지 않아 커스텀 이미지 피커를 만들기로 했습니다.
SAF의 장점
- 기본적인 UI 선택도구를 제공해줘서 UI를 따로 구현할 필요가 없습니다.
- 저장소 권한없이 파일에 접근 할 수 있습니다.
- 개발자가 직접 제공할 데이터에대한 앱 또는 모듈을 만들 수 있습니다.
SAF의 단점
- UI 선택도구가 사용하기 편하지 않습니다.
- 선택 시 Uri는 해당앱이 종료되고나면 다시 사용 할 수 없습니다.(uri를 저장해서 컨텐츠 불러오기 불가)
Custom Image Picker 만들기
커스텀 이미지 피커는 MediaDB를 사용할 예정이며 이는 저장소 접근 권한을 필요로하기때문에 민감한 권한이므로 앱 출시때에는 개인정보에 대한 가이드를 잘 지켜야 할 것입니다.
이미지를 제공하는 PictureProvider 만들기
먼저 내장메모리의 이미지를 다루기위해선 ContentResolver와 MediaStore에 대한 사용방법을 익혀햐합니다. 앱 개발을 하면 해당 기능을 그렇게 이용할 일이 많지 않아. 필요할 때마다 구글링했는데, 이제는 재활용 가능한 모듈화를 해보겠습니다.
/**
* 사진 정보 제공자입니다.
*/
interface PictureProvider {
/**
* 사진을 포함하고 있는 폴더리스트를 반환합니다.
*/
fun getFolderList()
/**
* 폴더경로를 입력하면 해당 폴더의 사진들을 반환합니다.
*/
fun getPictures()
}