[Programming] 안드로이드(Android) 앱간 데이터공유(ContentProvider와 ContentResolver)
13 Apr 2019
Reading time ~1 minute
안드로이드에서 App간에 데이터를 공유(전달 받을때)할때가 있다. 연락처 앱의 연락처를 받아온다거나가 그러한 경우다. App 간에 데이터를 공유하는 방법은 다양하다. 서버를 이용하는 방식, DB, BroadcastReceiver 등등… 이번에는 그중에서도 ContentProvider와 ContentResolver를 이용하는 방식에대해 포스팅 해보려 한다. 참고로 코딩방법이 아닌 개념에 관한 포스팅이다.
### ContentProvider 와 ContentResolver
앱들은 각각 DB를 가질수 있다. 해당 DB에 있는 데이터를 Interface를 정의 하여 외부로(다른 Package)제공 하는 방법이 바로 ContentProvider 컴포넌트를 이용하는 것이다. 즉, ContentProvider는 데이터(Content)를 제공(Provide) 해주는 녀석인 것이다.
Give and Take 라는 말이 있다. 주는 녀석이 있으면 받는 녀석도 있지 않을까? 그녀석이 바로 ContentResolver라는 녀석이다. ContentResolver는 객체이다. URI로 데이터를 제공받을 ContentProvider를 찾아서 접근에 관한 결과를 리턴받는다. 아래는 이 과정을 도식화 한것이다.
[출처 : Rhyshan, https://rhyshan.com/493]
App의 디비에서 ContentProvider를 이용하여 특정 데이터를 제공하고 있다. ContentProvider는 자신의 URI를 가지고 있고 ContentResolver는 이 URI를 이용하여 ContentProvider를 찾아가는 것이다.
##### URI : [scheme]: //[authority]/[path]/[id] 포맷을 가지는 국제 표준
- [scheme] : uri의 주최의 scheme ContentProvider 의 경우는 ‘content’ 라는 scheme을 가진다.
- [authority] : 패키지의 Provider 고유 식별자.
- [path] : 데이터 경로
- [id] : 추가적인 정보, 파라미터
ex) content: //io.github.codinggom.GomProvider/posts/324 => io.github.codinggom 패키지의 GomProvider를 찾아 324번 posts의 데이터를 제공받겠다.
### ContentObserver Observer라는 개념은 무언가를 감시하는 것이다. ContentObserver가 감시하는 것은 URI에 해당하는 데이터가 변경되는 것을 감지한다. ContentObserver class 의 onChange()함수를 override 해서 데이터 변화를 감지했을때 처리를 할 수 있다.