<поставщик>

синтаксис:
<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>
<property>
описание:
Объявляет компонент поставщика контента. Поставщик контента — это подкласс 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
Указывает, может ли система создать экземпляр поставщика контента. Если может, принимает значение "false" "true" , если нет. Значение по умолчанию — "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
Значок, представляющий поставщика контента. Этот атрибут устанавливается как ссылка на ресурс drawable, содержащий определение изображения. Если он не установлен, вместо него используется значок, указанный для всего приложения. Для получения дополнительной информации см. атрибут 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
См. также:
Поставщики контента