<поставщик>

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