- 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.healthcareprovideridentyfikuje samego dostawcę. System Android wyszukuje organ w swojej liście znanych dostawców i ich organów. Podciągnurses/rnto ścieżka, której dostawca treści używa do identyfikowania podzbiorów danych dostawcy.Gdy definiujesz dostawcę w elemencie
<provider>, w argumencieandroid:namenie 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 podklasyContentProvider, 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 atrybutenabled, który dotyczy wszystkich komponentów aplikacji, w tym dostawców treści. Aby dostawca treści mógł zostać włączony, atrybuty<application>i<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:directBootAwareCzy 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. Ustawandroid: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ą elementuandroid: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:targetSdkVersionna 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ą atrybutupermission. -
android:grantUriPermissionsCzy 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,permissioniexported.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_PERMISSIONiFLAG_GRANT_WRITE_URI_PERMISSIONw obiekcieIntent, który aktywuje komponent. Na przykład aplikacja poczty może umieścićFLAG_GRANT_READ_URI_PERMISSIONwIntentprzekazywanym doContext.startActivity(). Uprawnienie jest przypisane do konkretnego identyfikatora URI w komponencieIntent.Jeśli włączysz tę funkcję, ustawiając ten atrybut na
"true"lub definiując podelementy<grant-uri-permission>, wywołajContext.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 noneWyłą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.enforceIntentFilterWymaga 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.
allowNullActionZmienia 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>elementulabel.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:permissionNazwa 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,writePermissionigrantUriPermissionsmają 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 atrybutwritePermissionjest 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:processNazwa 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
processelementu<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 atrybutemprocess, 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:readPermissionUprawnienie, które klienci muszą mieć, aby wysyłać zapytania do dostawcy treści.
Jeśli dostawca ustawi wartość
android:grantUriPermissionsna"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
permissioniwritePermission.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:writePermissionUprawnienie, którego klienci potrzebują do wprowadzania zmian w danych kontrolowanych przez dostawcę treści.
Jeśli dostawca ustawi wartość
android:grantUriPermissionsna"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
permissionireadPermission.
- wprowadzony w:
- Poziom API 1
- Zobacz też:
- Dostawcy treści
<dostawca>
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2026-07-03 UTC.
[null,null,["Ostatnia aktualizacja: 2026-07-03 UTC."],[],[]]