<поставщик>

синтаксис:
<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
см. также:
Поставщики контента