훌륭한 개발자가 되기 위하여
[Android | Kotlin] 콘텐츠 프로바이더 이해하기 본문
콘텐츠 프로바이더는 앱끼리 데이터를 연동하는 컴포넌트
데이터는 보통 대상 앱의 데이터베이스나 파일 또는 앱에 할당된 메모리에 있습니다.
콘텐츠 프로바이더를 이용하면 저장소에 있는 데이터를 가져오거나 수정할 수 있습니다.
콘텐츠 프로바이더 작성하기
- 콘텐츠 프로바이더는 ContentProvider 클래스를 상속
- onCreate( ), getType( ), query( ), insert( ), update( ), delete( ) 함수를 재정의해서 작성
// 콘텐츠 프로바이더 작성
class MyContentProvider : ContentProvider() {
override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
return 0
}
override fun getType(uri: Uri): String? {
return null
}
override fun insert(uri: Uri, values: ContentValues?): Uri? {
return null
}
override fun onCreate(): Boolean {
return false
}
override fun query(
uri: Uri,
projection: Array<out String>?,
selection: String?,
selectionArgs: Array<out String>?,
sortOrder: String?
): Cursor? {
return null
}
override fun update(
uri: Uri,
values: ContentValues?,
selection: String?,
selectionArgs: Array<out String>?
): Int {
return 0
}
}
- 콘텐츠 프로바이더도 안드로이드 컴포넌트이므로 매니페스트에 등록
- name 속성뿐만 아니라 authorities 속성도 반드시 선언
- authorities 속성은 외부에서 이 콘텐츠 프로바이더를 이용할 때 식별값
//매니페스트에 콘텐츠 프로바이더 등록
<provider
android:authorities="com.example.test_provider"
android:name=".MyContentProvider"
android:exported="true"
android:enabled="true">
</provider>
콘텐츠 프로바이더 이용하기
- 콘텐츠 프로바이더는 인텐트와 상관이 없습니다.
- 외부 앱에서 콘텐츠 프로바이더를 사용하려면 먼저 매니페스트에 해당 앱에 관한 패키지 공개 설정
- 콘텐츠 프로바이더를 사용할 때는 ContentResolver 객체를 이용
- public final int delete(Uri url, String where, String[ ] selectionArgs)
- public final Uri insert(Uri url, ContentValues values)
- public final Cursor query(Uri uri, String[ ] projection, String selection, String[ ] selectionArgs, String sortOrder)
- public final int update(Uri uri, ContentValues values, String where, String[ ] selectionArgs)
<!-- 패키지 공개 설정 -->
<queries>
<!-- 둘 중 하나만 선언하면 됩니다. -->
<!-- <provider android:authorities="com.example.test_provider" /> -->
<package android:name="com.example.test_outter" />
</queries>
// 시스템의 콘텐츠 프로바이더 사용
contentResolver.query(
Uri.parse("content://com.example.test_provider"),
null, null, null, null)
)
- Uri 객체의 URL 문자열은 프로토콜명과 콘텐츠 프로바이더의 식별자로 등록된 authorities 값
'안드로이드' 카테고리의 다른 글
[Android] Ktlint적용하기 (0) | 2024.10.29 |
---|---|
[Android | Kotlin] 안드로이드 기본 앱과 연동하기 (1) | 2024.01.03 |
[Android | Kotlin] 잡 스케줄러 (1) | 2023.12.31 |
[Android | Kotlin] 백그라운드 제약 (0) | 2023.12.31 |
[Android | Kotlin] 바인딩 서비스 (0) | 2023.12.29 |