- 문법:
-
<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>
<intent-filter>
<path-permission>
- 설명:
- 콘텐츠 제공자 구성요소를 선언합니다. 콘텐츠 제공자는 애플리케이션에서 관리되는 데이터에 관해 구조화된 액세스를 제공하는
ContentProvider
서브클래스입니다. 애플리케이션의 모든 콘텐츠 제공자는 매니페스트 파일의<provider>
요소에서 정의해야 합니다. 그러지 않으면 시스템에서 인식하지 못해 실행되지 않습니다.애플리케이션의 일부인 콘텐츠 제공자만 선언하세요. 애플리케이션에서 사용하는 다른 애플리케이션에서 콘텐츠 제공자를 선언하지 마세요.
Android 시스템은 제공자의 콘텐츠 URI의 일부인 권한 문자열에 따라 콘텐츠 제공자 참조를 저장합니다. 예를 들어 의료 전문가에 관한 정보를 저장하는 콘텐츠 제공자에 액세스하려는 경우 다른 인수 중에서 제공자를 식별하는 URI를 사용하는
ContentResolver.query()
메서드를 호출합니다.content://com.example.project.healthcareprovider/nurses/rn
여기서
content:
스키마는 URI를 Android 콘텐츠 제공자를 가리키는 콘텐츠 URI로 식별합니다. 권한com.example.project.healthcareprovider
는 제공자 자체를 식별합니다. Android 시스템은 알려진 제공자 및 권한 목록에서 권한을 조회합니다. 하위 문자열nurses/rn
은 경로로, 콘텐츠 제공자가 제공자 데이터의 하위 집합을 식별하는 데 사용합니다.<provider>
요소에서 제공자를 정의하는 경우android:name
인수에 스키마나 경로를 포함하지 않고 권한만 포함합니다.콘텐츠 제공자 사용 및 개발에 관한 자세한 내용은 콘텐츠 제공자를 참고하세요.
- 속성:
-
android:authorities
- 콘텐츠 제공자에서 제공되는 데이터를 식별하는 URI 권한을 하나 이상 보여주는 목록입니다.
세미콜론으로 이름을 구분하여 여러 권한을 나열합니다.
충돌을 방지하려면 권한 이름에 Java 스타일 이름 지정 규칙을 사용합니다(예:
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"
입니다.권한 부여는 애플리케이션 구성요소가 권한으로 보호되는 데이터에 일회성으로 액세스할 수 있게 하는 방법입니다. 예를 들어 이메일에 첨부파일이 포함되어 있을 때 메일 애플리케이션은 콘텐츠 제공자의 모든 데이터를 볼 수 있는 일반 권한이 없는 뷰어라도 적합하다면 이 뷰어를 호출하여 첨부파일을 엽니다.
이 경우 구성요소를 활성화하는
Intent
객체의FLAG_GRANT_READ_URI_PERMISSION
플래그와FLAG_GRANT_WRITE_URI_PERMISSION
플래그가 권한을 부여합니다. 예를 들어 메일 애플리케이션은Context.startActivity()
에 전달되는Intent
에FLAG_GRANT_READ_URI_PERMISSION
을 포함할 수 있습니다. 이 권한은Intent
의 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
- 참고 항목:
- 콘텐츠 제공자
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2024-08-22(UTC)
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"필요한 정보가 없음"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"너무 복잡함/단계 수가 너무 많음"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"오래됨"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"번역 문제"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"샘플/코드 문제"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"기타"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"이해하기 쉬움"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"문제가 해결됨"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"기타"
}]
{"lastModified": "\ucd5c\uc885 \uc5c5\ub370\uc774\ud2b8: 2024-08-22(UTC)"}
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2024-08-22(UTC)"]]