안드로이드를 처음에 공부하면 안드로이드 4대 컴포넌트에 관한 내용이 있다.
그 중 하나인 Cotent Provider는 어플케이션 사이에서 파일 및 데이터를 공유하는 역할을 갖는다.
어떠한 앱이 다른 앱의 데이터에 직접 접근할 수 없기에 무조건 Content Provider를 통해 다른 앱의 데이터에 접근해야 한다.
파일을 공유하는 대표적인 사례로 SNS앱을 사용해서 사진파일을 업로드 하는 경우 갤러리 앱에 접근하여 사진 파일을 가져오는 경우가 있다.
편의상 아래와 같이 두자기 앱을 정의하자
데이터를 공유하는 경우 다른앱이 자신의 앱에 접근하여 데이터 조회 및 수정할 권한을 준다.
즉 B앱에서 A앱의 데이터에 기본적인 CRUD(생성, 읽기, 갱신, 삭제)가 가능하다.
다른 앱의 데이터에 접근하려면 앱에서 URI를 이용하여 Content Resolver를 통해 다른 앱의 Content Provider 에게 데이터를 요청한다.
Content Provider는 요청받은 URI를 확인 후 내부 DB에 접근하여 조회한 데이터를 Content Resolver에게 전달한다.

ContentResolver에서는 query(조회), insert, update, delete 작업이 가능하다.
아래는 Content Resolver를 이용하여 CRUD 관련 query, insert 메서드 호출, 커스텀메서드 호출을 위한 call 메서드를 호출하는 예이다.
val contentURI = Uri.parse("content://com.study.providera.MyContentProvider")
// query
contentResolver.query(contentURI, null, null, null, null)
// insert
val values = ContentValues()
values.put("title", "제목")
values.put("content", "내용")
contentResolver.insert(contentURI, contentValues)
// Custom Method
val bundle: Bundle? = contentResolver.call(contentURI, "{메소드명}", null, null)
...
ContentResolver는 URI를 이용하여 ContentProvider에 데이터를 요청한다고 했다. 이때 URI 구조에 대해서 알아보자.
위 ContentResolver 예시 코드에서 URI를 정의한 내용을 보면
val contentURI = Uri.parse("content://com.study.providera.MyContentProvider")
URI 예시 - content://com.study.providera.MyContentProvider/item/1
(scheme) ( authority ) ( path/id )