Android
content providers
aucd29
2013. 10. 8. 14:42
- content provider 는 데이터를 저장하거나 가져올 수 있는 역할 을 한다.
- 모든 앱에서 접근이 가능하며 이를 이용해 앱간 데이터를 공유할 수 있게 되어있다. (안드로이드는 공통 저장공간이 없다.)
- 안드로이드에는 일반적인 데이터 타입 (오디오, 비디오, 이미지, 개인 정보 등)에 대한 content provider를 포함한다.
- android.provider 에서 몇개의 목록을 볼 수 있다.
- 데이터를 읽고/쓰기 위해서는 퍼미션을 가져야 한다.
- 데이터에 컨트롤은 사용자에 의해서 달라질 수 있으나 일반적으로 query를 날리고 그에 대한 응답을 받는 구조를 이용해 /추가/수정/삭제/ 에 작업을 하게 된다. 이는 ContentResolver object 를 통해 사용되며 이는 component 내부에서 getContentResolver() 를 이용해 얻을 수 있다.
[code]
ContentResolver cr = getContentResolver();
[/code]
- system 이 모든 content provider object 를 instance 하므로 사용자를 이에 관여 하지 않아도 된다.
- 사용자는 content provider를 content resolver 를 통해 communication 할 수 있다.
The data model
- 모든 레코드는 하나의 숫자 _ID 필드를 포함한다. 이는 해당 레코드에 고유한 번호를 가지게 된다. (primary key ?)
- query 는 각각의 필드의 내용을 읽어 들이기 위해, 레코드에서 레코드로 이동할 수 있고 컬럼과 컬럼으로도 이동 가능하며 Cursor object 가 사용 된다.
- 특정 필드를 읽기 위해서는 해당 필드의 타입을 정확히 알고 있어야 한다.
URIs
- content provider 는 public 한 고유의 URI object를 제공 한다.
- 여러개의 데이터 집합을 제어하는 컨텐츠 프로바이더는 각각 별도의 URI 를 제공한다.
- 프로바이더를 위한 모든 URI 는 content:// 로 시작 되어야 한다.
- contnet: 스키마는 해당 데이터가 content provider 에 의해 제어되는 것으로 간주 된다.
- content provider 를 사용할 때 URI 는 상수로 정의하는 것 이 좋다.
> 예
[code]
android.provider.Contacts.Phones.CONTENT_URI
android.provider.Contacts.Photos.CONTENT_URI
android.provider.CallLog.Calls.CONTENT_URI
android.provider.Calendar.CONTENT_URI
[/code]
- URI 상수는 content provider 와 상호 작용을 한다.
- 모든 content resolver 에 첫번째 매개변수는 URI 이며 이는 content resolver 가 어느 content provider와 communication 을 하는지 구분하게 한다.
- 모든 앱에서 접근이 가능하며 이를 이용해 앱간 데이터를 공유할 수 있게 되어있다. (안드로이드는 공통 저장공간이 없다.)
- 안드로이드에는 일반적인 데이터 타입 (오디오, 비디오, 이미지, 개인 정보 등)에 대한 content provider를 포함한다.
- android.provider 에서 몇개의 목록을 볼 수 있다.
- 데이터를 읽고/쓰기 위해서는 퍼미션을 가져야 한다.
- 데이터에 컨트롤은 사용자에 의해서 달라질 수 있으나 일반적으로 query를 날리고 그에 대한 응답을 받는 구조를 이용해 /추가/수정/삭제/ 에 작업을 하게 된다. 이는 ContentResolver object 를 통해 사용되며 이는 component 내부에서 getContentResolver() 를 이용해 얻을 수 있다.
[code]
ContentResolver cr = getContentResolver();
[/code]
- system 이 모든 content provider object 를 instance 하므로 사용자를 이에 관여 하지 않아도 된다.
- 사용자는 content provider를 content resolver 를 통해 communication 할 수 있다.
The data model
- 모든 레코드는 하나의 숫자 _ID 필드를 포함한다. 이는 해당 레코드에 고유한 번호를 가지게 된다. (primary key ?)
- query 는 각각의 필드의 내용을 읽어 들이기 위해, 레코드에서 레코드로 이동할 수 있고 컬럼과 컬럼으로도 이동 가능하며 Cursor object 가 사용 된다.
- 특정 필드를 읽기 위해서는 해당 필드의 타입을 정확히 알고 있어야 한다.
URIs
- content provider 는 public 한 고유의 URI object를 제공 한다.
- 여러개의 데이터 집합을 제어하는 컨텐츠 프로바이더는 각각 별도의 URI 를 제공한다.
- 프로바이더를 위한 모든 URI 는 content:// 로 시작 되어야 한다.
- contnet: 스키마는 해당 데이터가 content provider 에 의해 제어되는 것으로 간주 된다.
- content provider 를 사용할 때 URI 는 상수로 정의하는 것 이 좋다.
> 예
[code]
android.provider.Contacts.Phones.CONTENT_URI
android.provider.Contacts.Photos.CONTENT_URI
android.provider.CallLog.Calls.CONTENT_URI
android.provider.Calendar.CONTENT_URI
[/code]
- URI 상수는 content provider 와 상호 작용을 한다.
- 모든 content resolver 에 첫번째 매개변수는 URI 이며 이는 content resolver 가 어느 content provider와 communication 을 하는지 구분하게 한다.