본문 바로가기

android

ContentProvider

안드로이드에는 모든 안드로이드 패키지들이 액세스할 수 있는 공통의 저장 장소가 없다. ContentProvider들은 Application들 사이의 데이터를 공유할 수 있는 유일한 방법이다. ContentProvider는 데이터를 저장하고 검색하고, 모든 Application에서 액세스 할 수 있도록 한다.

 
안드로이드는 공통의 데이터타입들(audio, video, image, personal contact information등)에 대한 많은 contentprovider를 제공한다.

자신의 데이터를 다른 application에서 접근할 수 있게 하는 방법에는 두 가지 방법이 있다.
1. 자신의 contentProvider를 작성한다
2. 존재하는 provider에 데이터를 추가한다. 이렇게하기 위해서는 같은 데이터타입을 제어하는 ContentProvider여야 하며, 쓰기에 대한 접근 허용이 되어 있어야 한다.

일반적으로 contentProvider를 직접 사용하지 않고, contentResolver를 사용한다.
※ Activity 또는 다른 컴포넌트의 getContentResolver 메소드를 통해서 얻을 수 있다.
   ContentResolver cr = getContentResolver();

 

1. 데이터 모델
contentProvider들이 제공하는 데이터는 간단한 테이블 형태를 갖는다. 각 행은 레코드이고 각 열은 특별한 의미를 가진 데이터이다.

2. URI
각각의 contentProvider는 Uri 객체로 작성된 URI를 제공한다. 다수의 데이터셋을 제어하는 ContentProvider는 각각에 대해 구별된 URI를 제공한다
ex) content://....

contentProvider를 정의할 때, URI 상수를 정의하는 것이 좋다. 안드로이드는 플랫폼과 함께 제공하는 모든 provider들에 대해 CONTENT_URI를 정의하고 있다.
ex) android.provider.Contacts.Phones.CONTENT_URI
    android.provider.Contacts.Photos.CONTENT_URI

3. Query
URI를 사용한다는 점을 제외하고는 Database를 쿼리하는 것과 비슷하다.
ContentResolver.query or Activity.managedQuery 메소드를 사용할 수 있다.(Cursor 리턴)

쿼리는 하나 이상의 데이터베이스 레코드들을 리턴한다.
모든 프로바이더느 항상 _ID와 레코드 수를 나타내는 _COUNT 열을 포함한다.
검색된 데이터는 Cursor를 통해 접근가능하다.
ex) Cursor cursor = resolver.query( Alarm.Columns.CONTENT_URI, Alarm.Columns.ALARM_QUERY_COLUMNS,
                "alarms._id==" + id, null, null);

[출처] Android] ContentProvider|작성자 경이

http://blog.naver.com/rudnfskfl?Redirect=Log&logNo=70089077115 --> 퍼왔어요