Android

컨텐츠 프로바이더

까망사과 2022. 9. 19. 01:00

컨텐츠 프로바이더는 외부 앱과 앱 데이터를 공유할 때 사용하는 앱 컴포넌트다.

 

ContentProvider 클래스 구현하기

모든 컨텐츠 프로바이더는 ContentProvider의 하위 클래스이다. ContentProvider는 다른 앱의 데이터 액세스 요청을 처리한다. 데이터 쿼리, 추가, 갱신, 삭제 등의 동작을 수행하는데, 이를 위해서는 다음 나열된 메서드를 구현해야 한다.

  • query()
    컨텐츠 프로바이더의 테이블을 쿼리한다. 쿼리할 테이블, 반환하고자 하는 행 및 열, 정렬 기준 등을 인자로 전달한다. 쿼리 결과는 Cursor 객체로 반환된다.
  • insert()
    새 행을 추가한다. 행을 추가할 테이블의 URI, 추가할 데이터(ContentValues 객체 사용) 등을 인자로 전달한다. 새로 추가되는 행의 URI를 반환한다.
  • update()
    기존 행의 데이터를 갱신한다. insert()와 유사하게 갱신할 데이터는 ContentValues 객체를 사용한다. 갱신된 행의 개수를 반환한다.
  • delete()
    행을 삭제한다. 삭제하고자 하는 행이 포함된 테이블의 URI, 행을 삭제하는 조건 등을 인자로 전달한다. 삭제된 행의 개수를 반환한다.
  • onCreate()
    시스템이 컨텐츠 프로바이더 객체를 생성할 때 호출하는 수명주기 콜백 메서드

 

매니페스트 파일에 <provider> 선언하기

컨텐츠 프로바이더는 앱 컴포넌트이므로 앱 매니페스트 파일 안에 <provider>로 등록해야 한다. 다음 속성을 설정할 수 있다.

  • android:authorities
    컨텐츠 프로바이더가 제공하는 데이터에 대한 URI의 authority 목록. 시스템이 컨텐츠 프로바이더를 식별할 때 사용하는 이름이므로 고유한 문자열이어야 한다. 기본값이 없으므로 적어도 하나 이상은 설정해야 한다.
  • android:name
    해당 컨텐츠 프로바이더 클래스.
  • 컨텐츠 프로바이더에 대한 액세스 권한 관련 속성
    • android:permission
      컨텐츠 프로바이더의 데이터를 읽고 쓰기 위해 필요한 단일 권한. 다른 권한 속성보다 우선순위가 낮다.
    • android:readPermission
      컨텐츠 프로바이더를 쿼리할 때 필요한 권한.
    • android:writePermission
      컨텐츠 프로바이더의 데이터를 변경할 때 필요한 권한.
    • android:grantUriPermissions
      액세스 권한이 없는 앱에 임시로 권한을 부여할지 여부.
  • 기타 컨텐츠 프로바이더의 시작 및 제어, 정보 관련 속성

 

컨텐츠 URI

컨텐츠 프로바이더의 데이터의 URI는 컨텐츠 URI라 한다. 컨텐츠 URI는 다음과 같이 content 스키마, authority 부분, path 부분으로 나뉜다. authority는 시스템이 컨텐츠 프로바이더를 식별하는 데 사용하는 이름이며, path는 컨텐츠 프로바이더의 개별 테이블 또는 그의 개별 행을 나타낸다.

 

content://<authority>/<path>

 

다른 앱에서 컨텐츠 프로바이더에 액세스하기

다른 앱에서 컨텐츠 프로바이더에 액세스하려면 ContentResolver를 사용한다. ContentResolver 객체는 Context.getContentResolver()를 호출하여 얻는다. ContentResolver는 위에서 설명한 ContentProvider의 데이터를 다루는 메서드를 포함한다.