- 구문
-
<provider android:authorities="list" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:grantUriPermissions=["true" | "false"] android:icon="drawable resource" android:initOrder="integer" android:label="string resource" android:multiprocess=["true" | "false"] android:name="string" android:permission="string" android:process="string" android:readPermission="string" android:syncable=["true" | "false"] android:writePermission="string" > . . . </provider>
- 포함된 요소
<application>
- 포함 가능한 요소
<meta-data>
<grant-uri-permission>
<path-permission>
- 설명
- 콘텐츠 제공자 구성요소를 선언합니다. 콘텐츠 제공자는 애플리케이션에서 관리되는 데이터에 관해 구조화된 액세스를 제공하는
ContentProvider
의 서브클래스입니다. 애플리케이션의 모든 콘텐츠 제공자는 manifest 파일의<provider>
요소에서 정의해야 합니다. 그러지 않으면 시스템에서 인식되지 않고 실행되지 않습니다.애플리케이션의 일부인 콘텐츠 제공자만 선언합니다. 애플리케이션에서 사용하는 다른 애플리케이션의 콘텐츠 제공자는 선언해서는 안 됩니다.
Android 시스템은 제공자의 콘텐츠 URI의 일부인 권한 문자열에 따라 콘텐츠 제공자 참조를 저장합니다. 예를 들어 의료 전문가에 관한 정보를 저장하는 콘텐츠 제공자에 액세스하려는 경우 메서드
ContentResolver.query()
를 호출합니다. 이 인수는 제공자를 식별하는 URI를 가져옵니다.content://com.example.project.healthcareprovider/nurses/rn
여기서
content:
스키마는 URI를 Android 콘텐츠 제공자를 가리키는 콘텐츠 URI로 식별합니다. 권한com.example.project.healthcareprovider
는 제공자 자체를 식별합니다. Android 시스템은 알려진 제공자 및 권한 목록에서 권한을 조회합니다. 하위 문자열nurses/rn
은 경로로, 콘텐츠 제공자가 제공자 데이터의 하위 집합을 식별하는 데 사용할 수 있습니다.<provider>
요소에서 제공자를 정의하는 경우android:name
인수에 스키마나 경로를 포함하지 않고 권한만 포함합니다.콘텐츠 제공자 사용과 개발에 관한 자세한 내용은 API 가이드인 콘텐츠 제공자를 참고하세요.
- 속성
android:authorities
- 콘텐츠 제공자에서 제공되는 데이터를 식별하는 URI 권한을 하나 이상 보여주는 목록입니다.
권한이 여러 개이면 이름을 세미콜론으로 구분하여 나열됩니다.
충돌을 방지하기 위해 기관 이름은 자바 스타일의 이름 지정 규칙을 사용해야 합니다(예:
com.example.provider.cartoonprovider
). 일반적으로 이 이름은 제공자를 구현하는ContentProvider
서브클래스의 이름입니다.기본값은 없습니다. 권한을 하나 이상 지정해야 합니다.
android:enabled
- 시스템에서 콘텐츠 제공자를 인스턴스화할 수 있는지 여부입니다. 인스턴스화할 수 있으면 '
true
'이고 인스턴스화할 수 없으면 'false
'입니다. 기본값은 'true
'입니다.<application>
요소에는 콘텐츠 제공자를 포함한 모든 애플리케이션 구성요소에 적용되는 고유의enabled
속성이 있습니다.<application>
속성과<provider>
속성이 모두 'true
'(두 속성의 기본값)여야 콘텐츠 제공자를 사용할 수 있습니다. 둘 중 하나가 'false
'이면 제공자가 사용 중지되며 제공자를 인스턴스화할 수 없습니다. android:directBootAware
콘텐츠 제공자가 직접 부팅을 인식하는지 여부, 즉 사용자가 기기를 잠금 해제하기 전에 콘텐츠 제공자가 실행될 수 있는지 여부입니다.
참고: 직접 부팅되는 동안 애플리케이션의 콘텐츠 제공자는 기기 보호 저장소에 저장된 데이터에만 액세스할 수 있습니다.
기본값은
"false"
입니다.android:exported
- 다른 애플리케이션에서 콘텐츠 제공자를 사용할 수 있는지 여부입니다.
-
true
: 다른 애플리케이션에서 제공자를 사용할 수 있습니다. 모든 애플리케이션이 제공자에 지정된 권한에 따라 제공자의 콘텐츠 URI를 사용해 액세스할 수 있습니다. -
false
: 다른 애플리케이션에서 제공자를 사용할 수 없습니다. 내 애플리케이션만 제공자에 액세스할 수 있게 제한하려면android:exported="false"
를 설정합니다. 제공자와 동일한 사용자 ID(UID)를 가진 애플리케이션 또는android:grantUriPermissions
요소를 통해 제공자 액세스 권한을 일시적으로 부여받은 애플리케이션이 액세스할 수 있습니다.
이 속성은 API 레벨 17에서 도입되었기 때문에 API 레벨 16 이하를 실행하는 모든 기기는 이 속성이
"true"
로 설정된 것처럼 작동합니다.android:targetSdkVersion
을 17 이상으로 설정하는 경우 API 레벨 17 이상을 실행하는 기기에서 기본값은"false"
입니다.android:exported="false"
를 설정하고permission
속성을 사용해 권한을 설정하는 방법으로 제공자 액세스를 제한할 수도 있습니다. -
android:grantUriPermissions
- 일반적으로는 콘텐츠 제공자의 데이터에 액세스할 권한이 없는 사용자에게 액세스 권한을 부여함으로써
readPermission
,writePermission
,permission
,exported
속성에 따른 제한을 일시적으로 극복할 수 있는지 여부입니다. 부여할 수 있으면true
이고 부여할 수 없으면false
입니다. 'true
'일 때는 콘텐츠 제공자의 모든 데이터에 액세스할 권한을 부여할 수 있습니다. 'false
'일 때는<grant-uri-permission>
하위 요소(있는 경우)에 나열된 데이터 하위 집합에만 액세스할 권한을 부여할 수 있습니다. 기본값은 'false
'입니다.권한 부여는 애플리케이션 구성요소가 권한으로 보호되는 데이터에 일회성으로 액세스할 수 있게 하는 방법입니다. 예를 들어 이메일 메시지에 첨부파일을 포함되어 있을 때 메일 애플리케이션은 콘텐츠 제공자의 모든 데이터를 볼 수 있는 일반 권한이 없는 뷰어라도 적합하다면 이 뷰어를 호출하여 첨부파일을 엽니다.
이 경우 구성요소를 활성화하는 인텐트 객체의
FLAG_GRANT_READ_URI_PERMISSION
플래그와
FLAG_GRANT_WRITE_URI_PERMISSION
플래그가 권한을 부여합니다. 예를 들어 메일 애플리케이션은
Context.startActivity()
에 전달되는 인텐트에FLAG_GRANT_READ_URI_PERMISSION
을 포함할 수 있습니다. 이 권한은 인텐트의 URI에만 적용됩니다.이 속성을 '
true
'로 설정하거나<grant-uri-permission>
하위 요소를 정의하는 방법으로 이 기능을 사용 설정하면 적용 URI가 공급자에서 삭제될 때Context.revokeUriPermission()
을 호출해야 합니다.
<grant-uri-permission>
요소도 참고하세요. android:icon
- 콘텐츠 제공자를 나타내는 아이콘입니다.
이 속성은 이미지 정의가 포함된 드로어블 리소스의 참조로 설정해야 합니다. 이 속성이 설정되지 않은 경우 전체 애플리케이션에 지정된 아이콘이 대신 사용됩니다.
<application>
요소의icon
속성을 참고하세요. android:initOrder
- 동일한 프로세스에서 호스팅하는 다른 콘텐츠 제공자에 상대적으로 콘텐츠 제공자를 인스턴스화해야 하는 순서입니다. 콘텐츠 제공자 사이에 종속성이 있는 경우 제공자별로 이 속성을 설정하면 종속성에서 요구하는 순서대로 생성됩니다. 값은 단순 정수이며 숫자가 높을수록 먼저 초기화됩니다.
android:label
- 제공된 콘텐츠와 관련한, 사용자가 읽을 수 있는 라벨입니다.
이 속성을 설정하지 않으면 전체 애플리케이션에 설정된 라벨이 대신 사용됩니다.
<application>
요소의label
속성을 참고하세요.라벨은 사용자 인터페이스의 다른 문자열처럼 현지화될 수 있도록 문자열 리소스의 참조로 설정해야 합니다. 하지만 애플리케이션을 개발하는 동안 편의를 위해 라벨을 원시 문자열로 설정할 수도 있습니다.
android:multiprocess
- 앱이 여러 프로세스에서 실행되는 경우 이 속성은 콘텐츠 제공자 인스턴스를 여러 개 만들지 여부를 결정합니다.
true
이면 앱의 각 프로세스마다 고유한 콘텐츠 제공자 객체가 있고,false
이면 앱의 여러 프로세스가 콘텐츠 제공자 객체 하나만 공유합니다. 기본값은false
입니다.이 플래그를
true
로 설정하면 프로세스 간 통신의 오버헤드를 줄여 성능을 개선할 수 있지만 각 프로세스의 메모리 공간도 증가합니다. android:name
- 콘텐츠 제공자를 구현하는 클래스이자
ContentProvider
의 서브클래스의 이름입니다. 정규화된 클래스 이름(예:com.example.project.TransportationProvider
)이어야 합니다. 하지만 약식으로 이름의 첫 번째 문자가 마침표인 경우<manifest>
요소에서 지정된 패키지 이름에 추가됩니다.기본값은 없습니다. 이름을 지정해야 합니다.
android:permission
- 클라이언트가 콘텐츠 제공자의 데이터를 읽거나 쓰기 위해 필요한 권한의 이름입니다. 이 속성을 사용하면 읽기 및 쓰기를 위한 단일 권한을 편리하게 설정할 수 있습니다. 하지만
readPermission
,writePermission
,grantUriPermissions
속성이 이 속성보다 우선합니다.readPermission
속성도 설정되어 있으면 이 속성은 콘텐츠 제공자 쿼리용 액세스를 제어합니다.writePermission
속성이 설정되어 있으면 이 속성은 제공자 데이터 수정용 액세스를 제어합니다. android:process
- 콘텐츠 제공자가 실행해야 하는 프로세스의 이름입니다. 일반적으로 애플리케이션의 모든 구성요소는 애플리케이션용으로 만들어진 기본 프로세스에서 실행됩니다. 애플리케이션 패키지와 이름이 동일합니다.
<application>
요소의process
속성은 모든 구성요소에 다른 기본값을 설정할 수 있습니다. 하지만 각 구성요소는 고유한process
속성을 사용해 이 기본값을 재정의할 수 있으므로, 이 방법을 통해 애플리케이션을 여러 프로세스에 확산시킬 수 있습니다.이 속성에 할당된 이름이 콜론(':')으로 시작되면 필요에 따라 애플리케이션 전용의 새 프로세스가 만들어지고 이 프로세스에서 활동이 실행됩니다. 프로세스 이름이 소문자로 시작되면 활동은 이 이름의 전역 프로세스에서 실행됩니다(권한이 있는 경우). 이를 통해, 서로 다른 애플리케이션의 구성요소가 한 프로세스를 공유하여 리소스 사용량을 줄일 수 있습니다.
android:readPermission
클라이언트가 콘텐츠 제공자를 쿼리하는 데 필요한 권한입니다.
제공자가
android:grantUriPermissions
를true
로 설정하는 경우 또는 특정 클라이언트가<grant-uri-permission>
하위 요소의 조건을 충족하는 경우 클라이언트는 콘텐츠 제공자 데이터의 읽기 액세스 권한을 일시적으로 얻을 수 있습니다.permission
속성과writePermission
속성도 참고하세요.android:syncable
- 콘텐츠 제공자에 의해 제어되는 데이터를 서버의 데이터와 동기화할지 여부입니다. 동기화하면 '
true
'이고 동기화하지 않으면 'false
'입니다. android:writePermission
클라이언트가 콘텐츠 제공자에 의해 제어되는 데이터를 변경하는 데 필요한 권한입니다.
제공자가
android:grantUriPermissions
를true
로 설정하는 경우 또는 특정 클라이언트가<grant-uri-permission>
하위 요소의 조건을 충족하는 경우 클라이언트는 콘텐츠 제공자 데이터의 수정 액세스 권한을 일시적으로 얻을 수 있습니다.permission
속성과readPermission
속성도 참고하세요.
- 도입 시기
- API 레벨 1
- 참고 항목
- 콘텐츠 제공자
Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2019-12-27 UTC.