16-1 콘텐츠 프로바이더

StrayCat·2022년 12월 10일
0

콘텐츠 프로바이더

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

  • 이때, 데이터는 해당 앱의 데이터베이스나 파일, 앱의 메모리 등에 있으며 이런 데이터를 가져오거나 수정할 수 있다.

  • 이를 위해 내 앱의 데이터를 외부에 공개하려면 내 앱에 콘텐츠 프로바이더를 만들고 접근하는 방법을 제공해야 하며, 다른 앱에서도 콘텐츠 프로바이더를 통해 해당 데이터에 접근할 수 있다.

  • 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
    }
}
  • override 되는 함수들 중 onCreate()는 생명주기 함수이며 콘텐츠 프로바이더 객체가 생성될 때 자동으로 호출된다.

  • 해당 콘텐츠 프로바이더를 사용하려면 해당 앱에 대한 패키지 공개 설정을 해줘야 한다.

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

        contentResolver.query(
            Uri.parse("content://com.example.test_provider"), 
            null, null, null, null)
  • 해당 객체를 통해 delete, insert, query, update 의 함수를 사용할 수 있다.

0개의 댓글