<dostawca>

składnia:
<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:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
          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>
zawiera się w:
<application>
Może zawierać:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property>
description:
Deklaruje komponent dostawcy treści. Dostawca treści to podklasa ContentProvider, która zapewnia strukturalny dostęp do danych zarządzanych przez aplikację. Wszyscy dostawcy treści w aplikacji muszą być zdefiniowani w elemencie <provider> w pliku manifestu. W przeciwnym razie system ich nie rozpoznaje i nie uruchamia.

Deklaruj tylko dostawców treści, którzy są częścią Twojej aplikacji. Nie deklaruj dostawców treści w innych aplikacjach, których używasz w swojej aplikacji.

System Android przechowuje odniesienia do dostawców treści zgodnie z ciągiem znaków authority, który jest częścią identyfikatora URI treści dostawcy. Załóżmy na przykład, że chcesz uzyskać dostęp do dostawcy treści, który przechowuje informacje o pracownikach służby zdrowia. Aby to zrobić, wywołaj metodę ContentResolver.query(), która przyjmuje m.in. identyfikator URI dostawcy:

content://com.example.project.healthcareprovider/nurses/rn

content: Schemat identyfikuje identyfikator URI jako identyfikator URI treści wskazujący dostawcę treści Androida. Urządcom.example.project.healthcareprovider identyfikuje samego dostawcę. System Android wyszukuje organ w swojej liście znanych dostawców i ich organów. Podciąg nurses/rn to ścieżka, której dostawca treści używa do identyfikowania podzbiorów danych dostawcy.

Gdy definiujesz dostawcę w elemencie <provider>, w argumencie android:name nie podawaj schematu ani ścieżki, tylko nazwę domeny.

Więcej informacji o korzystaniu z dostawców treści i ich tworzeniu znajdziesz w artykule Dostawcy treści.

atrybuty:
android:authorities
Lista co najmniej 1 autorytetu identyfikatora URI, który identyfikuje dane oferowane przez dostawcę treści. Wymień kilka instytucji, oddzielając ich nazwy średnikami. Aby uniknąć konfliktów, używaj konwencji nazewnictwa w stylu Java w przypadku nazw organów, np. com.example.provider.cartoonprovider. Zwykle jest to nazwa podklasy ContentProvider, która implementuje dostawcę.

Nie ma wartości domyślnej. Musisz określić co najmniej 1 instytucję.

android:enabled
Czy dostawcę treści można utworzyć w systemie. Wpisz "true", jeśli jest to możliwe, a "false", jeśli nie. Wartością domyślną jest "true".

Element <application> ma własny atrybut enabled, który dotyczy wszystkich komponentów aplikacji, w tym dostawców treści. Aby dostawca treści mógł zostać włączony, atrybuty <application><provider> muszą mieć wartość "true", ponieważ domyślnie mają taką wartość. Jeśli którykolwiek z nich ma wartość "false", dostawca jest wyłączony. Nie można utworzyć jego instancji.

android:directBootAware

Czy dostawca treści jest świadomy bezpośredniego uruchamiania, czyli czy może działać, zanim użytkownik odblokuje urządzenie.

Uwaga: podczas bezpośredniego rozruchu dostawca treści w aplikacji może uzyskać dostęp tylko do danych przechowywanych w pamięci chronionej na urządzeniu.

Wartością domyślną jest "false".

android:exported
Określa, czy dostawca treści jest dostępny dla innych aplikacji.
  • "true": dostawca jest dostępny dla innych aplikacji. Każda aplikacja może używać identyfikatora URI treści dostawcy, aby uzyskać do niej dostęp, z zastrzeżeniem uprawnień określonych dla dostawcy.
  • "false": dostawca nie jest dostępny dla innych aplikacji. Ustaw android:exported="false", aby ograniczyć dostęp dostawcy do Twoich aplikacji. Dostęp do niego mają tylko aplikacje, które mają ten sam identyfikator użytkownika (UID) co dostawca, lub aplikacje, którym tymczasowo przyznano dostęp do dostawcy za pomocą elementu android:grantUriPermissions.

Ten atrybut został wprowadzony na poziomie interfejsu API 17, więc wszystkie urządzenia z poziomem interfejsu API 16 i niższym działają tak, jakby ten atrybut był ustawiony na "true". Jeśli ustawisz wartość android:targetSdkVersion na 17 lub wyższą, domyślna wartość to "false" w przypadku urządzeń z interfejsem API na poziomie 17 lub wyższym.

Możesz ustawić android:exported="false", ale nadal ograniczać dostęp do dostawcy, ustawiając uprawnienia za pomocą atrybutu permission.

android:grantUriPermissions

Czy użytkownicy, którzy zwykle nie mają uprawnień dostępu do danych dostawcy treści, mogą otrzymać takie uprawnienia, tymczasowo pokonując ograniczenia nałożone przez atrybuty readPermission, writePermission, permissionexported.

Wartość "true" oznacza, że można przyznać uprawnienia, a wartość "false" – że nie można. Jeśli "true", uprawnienia mogą zostać przyznane do dowolnych danych dostawcy treści. Jeśli wartość to "false", uprawnienia można przyznać tylko podzbiorom danych wymienionym w elementach podrzędnych <grant-uri-permission>, jeśli takie istnieją. Wartością domyślną jest "false".

Przyznanie uprawnień to sposób na jednorazowe przyznanie komponentowi aplikacji dostępu do danych chronionych przez uprawnienia. Na przykład gdy e-mail zawiera załącznik, aplikacja poczty może wywołać odpowiednią przeglądarkę, aby go otworzyć, nawet jeśli przeglądarka nie ma ogólnego uprawnienia do przeglądania wszystkich danych dostawcy treści.

W takich przypadkach uprawnienia są przyznawane przez flagi FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION w obiekcie Intent, który aktywuje komponent. Na przykład aplikacja poczty może umieścić FLAG_GRANT_READ_URI_PERMISSIONIntent przekazywanym do Context.startActivity(). Uprawnienie jest przypisane do konkretnego identyfikatora URI w komponencie Intent.

Jeśli włączysz tę funkcję, ustawiając ten atrybut na "true" lub definiując podelementy <grant-uri-permission>, wywołaj Context.revokeUriPermission() gdy objęty adres URI zostanie usunięty z usługi.

Zobacz też element <grant-uri-permission>.

android:icon
Ikona reprezentująca dostawcę treści. Ten atrybut jest ustawiony jako odwołanie do obiektu rysowalnego zawierającego definicję obrazu. Jeśli nie jest ustawiona, zamiast niej używana jest ikona określona dla całej aplikacji. Więcej informacji znajdziesz w opisie atrybutu <application>elementu <application>.icon
android:initOrder
Kolejność, w jakiej dostawca treści jest tworzony w porównaniu z innymi dostawcami treści hostowanymi w tym samym procesie. Jeśli między dostawcami treści występują zależności, ustawienie tego atrybutu dla każdego z nich zapewnia, że zostaną oni utworzeni w kolejności wymaganej przez te zależności. Wartość jest liczbą całkowitą, przy czym najpierw inicjowane są większe liczby.
android:intentMatchingFlags

Użyj tego atrybutu, aby precyzyjnie dostosować sposób, w jaki system dopasowuje przychodzące intencje do komponentów aplikacji. Domyślnie nie są stosowane żadne specjalne reguły dopasowywania.

Wartość ustawiona w tagu <provider> zastępuje wartość ustawioną w tagu <application>.

Wartość musi być co najmniej 1 z tych flag rozdzielonych znakiem „|”:

Flaga Opis
none Wyłącza wszystkie specjalne reguły dopasowywania w przypadku przychodzących intencji. Jeśli podasz kilka flag, sprzeczne wartości zostaną rozwiązane przez nadanie priorytetu fladze none.
enforceIntentFilter

Wymaga bardziej rygorystycznego dopasowywania przychodzących intencji:

  • Intencje jawne muszą być zgodne z filtrem intencji komponentu docelowego.
  • Intencje bez działania nie pasują do żadnego filtra intencji.
allowNullAction

Zmienia reguły dopasowywania, aby umożliwić dopasowywanie intencji bez działania. Ten flag jest używany w połączeniu z parametrem enforceIntentFilter, aby uzyskać następujące działanie:

  • Intencje jawne muszą być zgodne z filtrem intencji komponentu docelowego.
  • Intencje bez działania mogą pasować do dowolnego filtra intencji.

Więcej informacji znajdziesz w sekcji Bezpieczniejsze intencje w artykule o zmianach w działaniu Androida 16 (poziom interfejsu API 36).

android:label
Etykieta czytelna dla użytkownika, która opisuje dostarczone treści. Jeśli ten atrybut nie jest ustawiony, zamiast niego używana jest etykieta ustawiona dla całej aplikacji. Więcej informacji znajdziesz w opisie atrybutu <application> elementu label.

Etykieta jest zwykle ustawiana jako odwołanie do zasobu tekstowego, dzięki czemu można ją lokalizować tak jak inne ciągi znaków w interfejsie. Jednak dla wygody podczas tworzenia aplikacji można go też ustawić jako surowy ciąg znaków.

android:multiprocess
Jeśli aplikacja działa w wielu procesach, ten atrybut określa, czy tworzonych jest wiele instancji dostawcy treści. Jeśli "true", każdy proces aplikacji ma własny obiekt dostawcy treści. Jeśli"false", procesy aplikacji współdzielą tylko jeden obiekt dostawcy treści. Wartością domyślną jest "false".

Ustawienie tej flagi na "true" może poprawić wydajność, ponieważ zmniejsza obciążenie związane z komunikacją międzyprocesową, ale zwiększa też wykorzystanie pamięci przez każdy proces.

android:name
Nazwa klasy, która implementuje mechanizm dostarczania treści, podklasa klasy ContentProvider. Jest to zwykle pełna i jednoznaczna nazwa klasy, np. "com.example.project.TransportationProvider". Jeśli jednak pierwszy znak nazwy to kropka, jest ona dołączana do nazwy pakietu określonej w elemencie <manifest>.

Nie ma wartości domyślnej. Musisz podać nazwę.

android:permission

Nazwa uprawnienia, które klient musi mieć, aby odczytywać lub zapisywać dane dostawcy treści. Ten atrybut to wygodny sposób na ustawienie pojedynczego uprawnienia do odczytu i zapisu. Atrybuty readPermission, writePermission i grantUriPermissions mają jednak pierwszeństwo przed tym atrybutem.

Jeśli ustawiony jest też atrybut readPermission, kontroluje on dostęp do wysyłania zapytań do dostawcy treści. Jeśli atrybut writePermission jest ustawiony, kontroluje on dostęp do modyfikowania danych dostawcy.

Więcej informacji o uprawnieniach znajdziesz w sekcji Uprawnienia w omówieniu pliku manifestu aplikacji oraz w wskazówkach dotyczących bezpieczeństwa.

android:process

Nazwa procesu, w którym działa dostawca treści. Zwykle wszystkie komponenty aplikacji działają w domyślnym procesie utworzonym dla aplikacji. Ma taką samą nazwę jak pakiet aplikacji.

Atrybut process elementu <application> może ustawić inny domyślny styl dla wszystkich komponentów. Każdy komponent może jednak zastąpić wartość domyślną własnym atrybutem process, co pozwala rozdzielić aplikację na kilka procesów.

Jeśli nazwa przypisana do tego atrybutu zaczyna się od dwukropka (:), w razie potrzeby tworzony jest nowy proces prywatny dla aplikacji, w którym działa aktywność.

Jeśli nazwa procesu zaczyna się od małej litery, aktywność jest uruchamiana w globalnym procesie o tej nazwie, pod warunkiem że ma do tego uprawnienia. Dzięki temu komponenty w różnych aplikacjach mogą współdzielić proces, co zmniejsza zużycie zasobów.

android:readPermission

Uprawnienie, które klienci muszą mieć, aby wysyłać zapytania do dostawcy treści.

Jeśli dostawca ustawi wartość android:grantUriPermissions na "true" lub jeśli dany klient spełnia warunki elementu podrzędnego <grant-uri-permission>, może uzyskać tymczasowy dostęp do odczytu danych dostawcy treści.

Zobacz też atrybuty permissionwritePermission.

android:syncable
Czy dane pod kontrolą dostawcy treści można synchronizować z danymi na serwerze. Wpisz "true", jeśli jest to możliwe, a "false", jeśli nie.
android:writePermission

Uprawnienie, którego klienci potrzebują do wprowadzania zmian w danych kontrolowanych przez dostawcę treści.

Jeśli dostawca ustawi wartość android:grantUriPermissions na "true" lub jeśli dany klient spełnia warunki podane w podrzędnym elemencie <grant-uri-permission>, może uzyskać tymczasowy dostęp do zapisu, aby modyfikować dane dostawcy treści.

Zobacz też atrybuty permissionreadPermission.

wprowadzony w:
Poziom API 1
Zobacz też:
Dostawcy treści