콘텐츠 프로바이더

k_hyun·2023년 3월 22일
0

콘텐츠 프로바이더

앱끼리 데이터를 연동하는 컴포넌트이다.
앱을 개발하면서 다른 앱의 데이터를 사용할 때 콘텐츠 프로바이더를 이용한다.

콘텐츠 프로바이더 작성

class MyContentProvider : ContentProvider() {

    override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
        TODO("Implement this to handle requests to delete one or more rows")
    }

    override fun getType(uri: Uri): String? {
        TODO(
            "Implement this to handle requests for the MIME type of the data" +
                    "at the given URI"
        )
    }

    override fun insert(uri: Uri, values: ContentValues?): Uri? {
        TODO("Implement this to handle requests to insert a new row.")
    }

    override fun onCreate(): Boolean {
        TODO("Implement this to initialize your content provider on startup.")
    }

    override fun query(
        uri: Uri, projection: Array<String>?, selection: String?,
        selectionArgs: Array<String>?, sortOrder: String?
    ): Cursor? {
        TODO("Implement this to handle query requests from clients.")
    }

    override fun update(
        uri: Uri, values: ContentValues?, selection: String?,
        selectionArgs: Array<String>?
    ): Int {
        TODO("Implement this to handle requests to update one or more rows.")
    }
}

ContentProvider 클래스를 상속받아서 작성한다.

onCreate(), getType(), query(), insert(), update(), delete() 함수를 재정의해서 작성한다.

<provider
	android:name=".MyContentProvider"
	android:authorities="com.example.test_provider"
	android:enabled="true"
	android:exported="true">
</provider>

콘텐츠 프로바이더도 안드로이드 컴포넌트이므로 매니페스트에 등록해야 한다.
authorities 속성도 반드시 선언해야 한다.
해당 속성은 외부에서 콘텐츠 프로바이더를 이용할 때 식별값으로 사용되는 문자열이다.

<queries>
	<!-- 둘중 하나만 선언하면 된다. -->
	<!-- <provider android:authorities="com.example.test_provider" /> -->
    <package android:name="com.example.name"/>
</queries>

외부 앱에서 콘텐츠 프로바이더를 사용하려면 매니페스트에 해당 앱에 관한 패키지 공개 설정을 해줘야 한다.

contentResolver.query(
	Uri.parse("content://com.example.test_provider"),
    null, null, null, null)

시스템에 등록된 콘텐츠 프로바이더를 사용할 때는 ContentResolver 객체를 이용한다.

0개의 댓글