안녕하세요. 갤러리 앱에서 선택한 사진을 이용하는 부분이 왜 그렇게 동작하는지 감이 잡히지 않아 글을 작성하게 되었습니다.
(참고한 코드입니다.)
lateinit var filePath: String
override fun onCreate(savedInstanceState: Bundle?) {
...
tv_view_pictures.setOnClickListener {
val intent = Intent(Intent.ACTION_PICK)
intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.setType("image/*")
startActivityForResult(intent, 1)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode == 1) {
val uri: Uri = data!!.data!!
filePath = getImageFilePath(uri)
}
}
fun getImageFilePath(contentUri: Uri): String {
var columnIndex = 0
val projection = arrayOf(MediaStore.Images.Media.DATA)
val cursor = contentResolver.query(contentUri, projection, null, null, null)
if (cursor!!.moveToFirst()) {
columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA)
}
return cursor.getString(columnIndex)
}
1. 기본 카메라로 찍은 사진은 기본적으로 내부저장소에 저장이 될텐데 그 장소가 Mediastore인가요?
(Mediastore가 안드로이드 시스템에서 제공하는 미디어 DB라는 글을 보고 이렇게 생각하였습니다.)
만약 아니라면 개별 앱 공간이 아닌 내부저장소의 공용부분에 저장되는 파일에 접근하기위해서 외부저장소의 미디어파일에 접근하기위한 Mediastore가 사용되는 이유를 알고싶습니다.
2. 위 코드를 처리하기위해서는 android.permission.READ_EXTERNAL_STORAGE를 추가해줘야 했습니다.
내부저장소에 접근하는데 왜 외부저장소 퍼미션을 받아야 하는지 모르겠습니다.
혹시 EXTERNAL가 의미하는것이 안드로이드 플랫폼 내부/외부 공간이 아니라
해당 앱의 할당공간을 제외한 전체를 의미하는것인가요?
3. 다른 앱의 파일에 접근할때 과정이
============================================================
content resolver를 통해 uri를 욉 앱의 content provider에게 전달
-> content provider는 uri를 해석하여 해당 앱의 DB에 필요한 작업을 수행
-> content resolver에게 결과 반환
============================================================
인것으로 알고있습니다. 위 코드 또한 이런 과정으로 처리하는것으로 보이는데
============================================================
A라는 앱에서 갤러리 앱을 실행시켜 사진을 고르면 사진파일에 대한 uri를 반환받고
(내부적으로 갤러리의 content provider가 A의 content resolver로 데이터 반환)
A는 넘겨받은 uri를 다시 갤러리의 content provider에 전달하여 파일의 절대경로가 포함된 cursor객체를
반환받고 이 객체에서 파일의 절대경로를 추출해 사용.
============================================================
이런 과정을 거치는게 맞나요? 맞다면 1번 질문과 연관해서 Mediastore가 어는 부분에 사용되는것인지
알고싶습니다.
위 내용들을 계속 찾아보고 있지만 명확하게 정리되지 않아 글을 올립니다...