콘텐츠 프로바이더는 앱끼리 데이터를 연동하는 컴포넌트로, 다른 앱의 데이터를 사용할 때 콘텐츠 프로바이더를 이용한다.
이때, 데이터는 해당 앱의 데이터베이스나 파일, 앱의 메모리 등에 있으며 이런 데이터를 가져오거나 수정할 수 있다.
이를 위해 내 앱의 데이터를 외부에 공개하려면 내 앱에 콘텐츠 프로바이더를 만들고 접근하는 방법을 제공해야 하며, 다른 앱에서도 콘텐츠 프로바이더를 통해 해당 데이터에 접근할 수 있다.
content provider를 생성하면 authorities 속성을 반드시 설정해줘야 한다. 해당 값은 외부 앱에서 사용할 때 식별값으로 사용되는 고유한 값이다.
<provider
android:name=".MyContentProvider"
android:authorities="com.example.test_provider"
android:enabled="true"
android:exported="true"></provider>
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<String>?, selection: String?,
selectionArgs: Array<String>?, sortOrder: String?
): Cursor? {
return null
}
override fun update(
uri: Uri, values: ContentValues?, selection: String?,
selectionArgs: Array<String>?
): Int {
return 0
}
}
해당 콘텐츠 프로바이더를 사용하려면 해당 앱에 대한 패키지 공개 설정을 해줘야 한다.
시스템에 등록된 콘텐츠 프로바이더를 사용할 때에는 ContentResolver 객체를 사용한다.
contentResolver.query(
Uri.parse("content://com.example.test_provider"),
null, null, null, null)