- синтаксис:
<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 контента поставщика. Например, предположим, что вы хотите получить доступ к поставщику контента, который хранит информацию о медицинских работниках. Для этого вы вызываете метод
ContentResolver.query()
, который, помимо других аргументов, принимает URI, идентифицирующий поставщика:content://com.example.project.healthcareprovider/nurses/rn
Схема
content:
идентифицирует URI как URI контента, указывающий на поставщика контента Android. Полномочия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
Поддерживает ли поставщик контента Direct-Boot , то есть может ли он работать до того, как пользователь разблокирует устройство.
Примечание. Во время прямой загрузки поставщик контента в вашем приложении может получить доступ только к тем данным, которые хранятся в защищенном хранилище устройства .
Значение по умолчанию —
"false"
.-
android:exported
- Доступен ли поставщик контента для использования другими приложениями.
-
"true"
: поставщик доступен другим приложениям. Любое приложение может использовать URI контента поставщика для доступа к нему в соответствии с разрешениями, указанными для поставщика. -
"false"
: поставщик недоступен для других приложений. Установитеandroid:exported="false"
чтобы ограничить доступ поставщика к вашим приложениям. Доступ к нему имеют только приложения, имеющие тот же идентификатор пользователя (UID), что и поставщик, или приложения, которым временно предоставлен доступ к поставщику через элементandroid:grantUriPermissions
.
Поскольку этот атрибут был введен на уровне API 17, все устройства, использующие API уровня 16 и ниже, ведут себя так, как если бы для этого атрибута было установлено значение
"true"
. Если вы установитеandroid:targetSdkVersion
значение 17 или выше, то значение по умолчанию будет"false"
для устройств с уровнем API 17 и выше.Вы можете установить
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
в объектеIntent
, который активирует компонент. Например, почтовое приложение может поместитьFLAG_GRANT_READ_URI_PERMISSION
вIntent
, передаваемое вContext.startActivity()
. Разрешение зависит от URI вIntent
.Если вы включите эту функцию, установив для этого атрибута значение
"true"
или определив подэлементы<grant-uri-permission>
, вызовитеContext.revokeUriPermission()
, когда закрытый URI будет удален из поставщика.См. также элемент
<grant-uri-permission>
. -
android:icon
- Значок, представляющий поставщика контента. Этот атрибут устанавливается как ссылка на ресурс, который можно использовать для рисования, содержащий определение изображения. Если он не установлен, вместо него используется значок, указанный для приложения в целом. Дополнительные сведения см. в атрибуте
icon
элемента<application>
. -
android:initOrder
- Порядок, в котором создается экземпляр поставщика контента относительно других поставщиков контента, размещенных в том же процессе. Если между поставщиками контента существуют зависимости, установка этого атрибута для каждого из них гарантирует, что они будут созданы в порядке, требуемом этими зависимостями. Значение является целым числом, причем сначала инициализируются более высокие числа.
-
android:label
- Читаемая пользователем метка предоставляемого контента. Если этот атрибут не установлен, вместо него используется метка, установленная для приложения в целом. Дополнительную информацию см. в атрибуте
label
элемента<application>
.Метка обычно задается как ссылка на строковый ресурс, чтобы ее можно было локализовать, как и другие строки в пользовательском интерфейсе. Однако для удобства при разработке приложения его также можно задать как необработанную строку.
-
android:multiprocess
- Если приложение выполняется в нескольких процессах, этот атрибут определяет, будет ли создано несколько экземпляров поставщика контента. Если
"true"
, каждый из процессов приложения имеет собственный объект поставщика контента. Если"false"
, процессы приложения совместно используют только один объект поставщика контента. Значение по умолчанию —"false"
.Установка этого флага в значение
"true"
может повысить производительность за счет снижения накладных расходов на межпроцессное взаимодействие, но также увеличивает объем памяти, занимаемой каждым процессом. -
android:name
- Имя класса, реализующего поставщика контента, подкласса
ContentProvider
. Обычно это полное имя класса, например"com.example.project.TransportationProvider"
. Однако в качестве сокращения, если первым символом имени является точка, она добавляется к имени пакета, указанному в элементе<manifest>
.По умолчанию нет. Имя должно быть указано.
-
android:permission
- Имя разрешения, которое клиенты должны иметь для чтения или записи данных поставщика контента. Этот атрибут представляет собой удобный способ установки единого разрешения как на чтение, так и на запись. Однако атрибуты
readPermission
,writePermission
grantUriPermissions
имеют приоритет над этим.Если также установлен атрибут
readPermission
, он управляет доступом для запроса поставщика контента. Если атрибутwritePermission
установлен, он контролирует доступ для изменения данных поставщика.Дополнительные сведения о разрешениях см. в разделе «Разрешения» обзора манифеста приложения и в советах по безопасности .
-
android:process
- Имя процесса, в котором работает поставщик контента. Обычно все компоненты приложения выполняются в процессе по умолчанию, созданном для приложения. Он имеет то же имя, что и пакет приложения.
Атрибут
process
элемента<application>
может устанавливать разные значения по умолчанию для всех компонентов. Но каждый компонент может переопределить значение по умолчанию, используя свой собственный атрибут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
- см. также:
- Поставщики контента
Контент и образцы кода на этой странице предоставлены по лицензиям. Java и OpenJDK – это зарегистрированные товарные знаки корпорации Oracle и ее аффилированных лиц.
Последнее обновление: 2024-08-20 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":"Другое"
}]
{
"last_modified": "Последнее обновление: 2024-08-20 UTC.",
"state": ""
}