[Android/Kotlin] 콘텐츠 프로바이더

SoyoungLee·2022년 8월 4일
0

안드로이드/코틀린

목록 보기
43/68
post-thumbnail

💌 [Android/Kotlin] 콘텐츠 프로바이더

📌 콘텐츠 프로바이더란?

  • 앱끼리 데이터를 연동하는 컴포넌트.
  • ContentProvider 클래스를 상속받아 작성.
  • 이용하는 곳에서 contentResolver 객체를 이용해 query(), insert(), update(), delete() 함수를 호출.
  • 매니페스트에 등록한 autorities 속성값으로 식별.
  • ex) 안드로이드 기본 앱인 주소록, 갤러리, 카메라, 지도, 전화 앱 등 내가 만든 다른 앱과 연동할 때 사용

💜 ContentProvider 클래스 구현

  • ContentProvider 클래스를 상속받아 필수 메소드를 작성.

    query()

    데이터를 검색.
    인수를 사용하여 쿼리할 테이블과 반환할 열/행, 결과의 정렬 순서를 선택.
    데이터를 Cursor 객체로 반환.

    insert()

    새로운 행을 삽입.
    인수를 사용하여 대상 테이블을 선택하고 사용할 열 값을 가져옴.
    새로 삽입된 행에 대한 콘텐츠 URI를 반환.

    update()

    기존 행을 업데이트.
    업데이트할 테이블과 행을 선택하고 업데이트한 열 값을 가져옴.
    업데이트한 행 개수를 반환.

    delete()

    행을 삭제. 삭제할 테이블과 행을 선택. 삭제한 행 개수를 반환합니다.

    getType()

    콘텐츠 URI에 해당하는 MIME 유형을 반환.

    onCreate()

    초기화. 제공자를 생성한 직후 이 메소드 호출.
    ContentResolver 객체가 제공자에 액세스하려고 시도하기 전까지는 생성된 것이 아님.

class ExampleProvider : ContentProvider() {
    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 getType(uri: Uri): String? {
        return null
    }

    override fun insert(uri: Uri, values: ContentValues?): Uri? {
        return null
    }

    override fun delete(uri: Uri, p1: String?, p2: Array<out String>?): Int {
        return 0
    }

    override fun update(
        uri: Uri,
        values: ContentValues?,
        selection: String?,
        selectionArgs: Array<out String>?
    ): Int {
        return 0
    }
}

📌 매니페스트에 등록

  • 반드시 authorities 속성도 선언해야 함.
    외부에서 이용할 때 식별값으로 사용되는 문자열.
<manifest
	<application
    		..          >

		<provider
            android:authorities="com.example.kotlinstudypj.ui.ExampleProvider"
            android:name=".ui.ExampleProvider"
            android:enabled="true"
            android:exported="true">
		</provider>
        
</manifest>

📌 콘텐츠 프로바이더 이용

  • 매니페스트에 패키지 공개 설정
    <queries>
<!--        사용하려는 콘텐츠 프로바이더의 authorities 속성 선언-->
        <provider android:authorities="com.example.kotlinstudypj.ui.ExampleProvider"/>
<!--        또는 사용하려는 앱의 매니페스트에 대상 앱 패키지명 명시-->
        <package android:name="com.example.test"/>
    </queries>

💜 시스템 콘텐츠 프로바이더 사용

  • ContentResolver 객체를 이용하여 시스템에 등록된 콘텐츠 프로바이더를 사용.
  • Uri 문자열은 반드시 식별자로 등록된 authorities 값이어야 함.
contentResolver.query(
            Uri.parse("content://com.example.kotlinstudypj.ui.ExampleProvider"),
            null,null,null,null
        )

공식 문서 : https://developer.android.com/guide/topics/providers/content-providers?hl=ko
https://developer.android.com/reference/android/content/ContentProvider?hl=ko

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글