- 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: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>
- zawarte w:
-
<application>
- może zawierać:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
- description:
- Deklaruje komponent dostawcy treści. Dostawca treści to podklasa klasy
ContentProvider
, która zapewnia uporządkowany dostęp do danych zarządzanych przez aplikację. Wszyscy dostawcy treści w aplikacji muszą być zdefiniowany w elemencie<provider>
w pliku manifestu. W przeciwnym razie system będzie ich nie znał i nie będzie ich uruchamiał.Zadeklaruj tylko dostawców treści, którzy są częścią aplikacji. Nie deklaruj dostawców treści w innych aplikacjach, których używasz.
System Android przechowuje odwołania 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 lekarzach. Aby to zrobić, wywołaj metodę
ContentResolver.query()
, która pobiera między innymi identyfikator URI identyfikujący dostawcę:content://com.example.project.healthcareprovider/nurses/rn
Schemat
content:
określa identyfikator URI jako identyfikator URI treści wskazujący na dostawcę treści Androida. Urządcom.example.project.healthcareprovider
identyfikuje samego dostawcę. System Android wyszukuje urząd na liście znanych dostawców i ich urzędów. Podłańcuchnurses/rn
to ścieżka, której dostawca treści używa do identyfikowania podzbiorów danych.Gdy definiujesz dostawcę w elemencie
<provider>
, nie umieszczaj schematu ani ścieżki w argumencieandroid:name
, a tylko uprawnienia.Informacje na temat korzystania z usług dostawców treści i tworzenia ich znajdziesz w artykule Dostawcy treści.
- atrybuty:
-
android:authorities
- Lista co najmniej jednego urzędowania URI identyfikującego dane oferowane przez dostawcę treści.
Możesz podać wiele urzędów, rozdzielając ich nazwy średnikami.
Aby uniknąć konfliktów, używaj konwencji nazewnictwa urzędów w stylu Java, np.
com.example.provider.cartoonprovider
. Zwykle jest to nazwa podklasyContentProvider
, która implementuje dostawcęBrak wartości domyślnej. Musisz określić co najmniej jeden urząd.
android:enabled
- Czy system może utworzyć instancję dostawcy treści. Jeśli może, to
"true"
. Jeśli nie, to"false"
. Wartość domyślna to"true"
.Element
<application>
ma własny atrybutenabled
, który odnosi się do wszystkich komponentów aplikacji, w tym dostawców treści. Aby dostawca treści został włączony, obydwa atrybuty<application>
i<provider>
muszą mieć wartość"true"
, ponieważ oba mają wartość domyślną. Jeśli wartość to"false"
, dostawca jest wyłączony. Nie można utworzyć instancji. android:directBootAware
Określa, czy dostawca treści ma tryb bezpośredniego rozruchu, czyli czy może działać, zanim użytkownik odblokuje urządzenie.
Uwaga: w trakcie rozruchu bezpośredniego dostawca treści w aplikacji ma dostęp tylko do danych przechowywanych w pamięci chronionej urządzeniem.
Wartość domyślna to
"false"
.android:exported
- Wskazuje, czy dostawca treści jest dostępny dla innych aplikacji.
-
"true"
: dostawca jest dostępny dla innych aplikacji. Każda aplikacja może uzyskać do niej dostęp za pomocą identyfikatora URI treści dostawcy zgodnie z uprawnieniami określonymi dla dostawcy. -
"false"
: dostawca nie jest dostępny dla innych aplikacji. Ustawandroid:exported="false"
, aby ograniczyć dostęp do 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
.
Ponieważ ten atrybut został wprowadzony na poziomie interfejsu API 17, wszystkie urządzenia z interfejsem API na poziomie 16 i niższym zachowują się tak, jakby ten atrybut był ustawiony jako
"true"
. Jeśli ustawiszandroid:targetSdkVersion
na 17 lub więcej, domyślną wartością będzie"false"
w przypadku urządzeń z interfejsem API na poziomie 17 lub wyższym.Możesz ustawić
android:exported="false"
i nadal ograniczyć dostęp do dostawcy, ustawiając uprawnienia za pomocą atrybutupermission
. -
android:grantUriPermissions
- Niezależnie od tego, czy osoby, które zwykle nie mają dostępu do danych dostawcy treści, mogą otrzymać na to zgodę,
tymczasowo przezwyciężając ograniczenie nałożone przez atrybuty
readPermission
,writePermission
,permission
iexported
.To
"true"
, jeśli można przyznać uprawnienie, lub"false"
, jeśli nie można tego zrobić. Jeśli"true"
, można przyznać uprawnienia do dowolnych danych dostawcy treści. Jeśli zasada"false"
jest ustawiona, uprawnienia można przyznać tylko podzbiorom danych wymienionych w podelementach<grant-uri-permission>
(jeśli występują). Wartością domyślną jest"false"
.Przyznanie uprawnień to sposób na przyznanie składnikowi aplikacji jednorazowego dostępu do danych chronionych przez to uprawnienie. Jeśli na przykład e-mail zawiera załącznik, aplikacja pocztowa może zadzwonić do odpowiedniej osoby w celu jego otwarcia, nawet jeśli nie ma on uprawnień do przeglądania wszystkich danych dostawcy treści.
W takich przypadkach flagi
FLAG_GRANT_READ_URI_PERMISSION
iFLAG_GRANT_WRITE_URI_PERMISSION
w obiekcieIntent
przyznają uprawnienia, które aktywują komponent. Aplikacja pocztowa może na przykład umieścićFLAG_GRANT_READ_URI_PERMISSION
w elemencieIntent
przekazywanym doContext.startActivity()
. Uprawnienia dotyczą identyfikatora URI w komponencieIntent
.Jeśli włączysz tę funkcję, albo ustawiając w tym atrybucie wartość
"true"
lub definiując elementy podrzędne<grant-uri-permission>
, wywołajContext.revokeUriPermission()
, gdy dostawca zostanie usunięty z systemu URI, którego dotyczy identyfikator.Zobacz też element
<grant-uri-permission>
. android:icon
- Ikona dostawcy treści.
Ten atrybut jest ustawiony jako odwołanie do rysowalnego zasobu zawierającego definicję obrazu. Jeśli nie jest ustawiona, używana jest ikona określona dla całej aplikacji. Więcej informacji znajdziesz w atrybucie
icon
elementu<application>
. android:initOrder
- Kolejność tworzenia instancji dostawcy treści w porównaniu z innymi dostawcami treści hostowanymi w ramach tego samego procesu. Jeśli między dostawcami treści występują zależności, ustawienie tego atrybutu dla każdego z nich zapewni, że zostaną oni utworzony w kolejności wymaganej przez te zależności. Wartość jest liczbą całkowitą, przy czym najpierw inicjowane są większe liczby.
android:label
- Czytelna dla użytkownika etykieta dla dostarczanej treści.
Jeśli ten atrybut nie jest ustawiony, używana jest etykieta ustawiona dla całej aplikacji. Więcej informacji znajdziesz w atrybucie
label
elementu<application>
.Etykieta jest zwykle ustawiona jako odwołanie do zasobu w postaci ciągu znaków, więc można ją zlokalizować tak samo jak inne ciągi w interfejsie. Dla wygody podczas programowania aplikacji możesz ją jednak także ustawić jako nieprzetworzony ciąg znaków.
android:multiprocess
- Jeśli aplikacja działa w kilku procesach, ten atrybut określa, czy utworzono wiele instancji dostawcy treści. Jeśli
"true"
, każdy z procesów aplikacji ma własny obiekt dostawcy treści. Jeśli jest ustawiona na"false"
, procesy aplikacji mają tylko jeden obiekt dostawcy treści. Wartością domyślną jest"false"
.Ustawienie tej flagi na
"true"
może zwiększyć wydajność przez zmniejszenie nakładu pracy związanej z komunikacją międzyprocesami, ale zwiększa też ilość pamięci w poszczególnych procesach. android:name
- Nazwa klasy, która implementuje dostawcę treści – podklasę klasy
ContentProvider
. Jest to zwykle w pełni kwalifikowana nazwa klasy, na przykład"com.example.project.TransportationProvider"
. W skrócie: jeśli pierwszym znakiem nazwy jest kropka, jest on dołączany do nazwy pakietu podanej w elemencie<manifest>
.Brak wartości domyślnej. Należy podać nazwę.
android:permission
- Nazwa uprawnienia, które muszą mieć klienci do odczytu lub zapisu danych dostawcy treści. Ten atrybut to wygodny sposób na ustawienie jednego uprawnienia
do odczytu i zapisu. Jednak atrybuty
readPermission
,writePermission
igrantUriPermissions
mają pierwszeństwo przed tym.Jeśli jest też ustawiony atrybut
readPermission
, określa on dostęp do wysyłania zapytań do dostawcy treści. Jeśli jest ustawiony atrybutwritePermission
, kontroluje on dostęp do modyfikowania danych dostawcy.Więcej informacji o uprawnieniach znajdziesz w sekcji Uprawnienia w podsumowaniu pliku manifestu aplikacji i w Wskazówkach dotyczących bezpieczeństwa.
android:process
- Nazwa procesu, w ramach którego działa dostawca treści. Zwykle wszystkie komponenty aplikacji działają w ramach domyślnego procesu utworzonego dla niej. Ma taką samą nazwę jak pakiet aplikacji.
Atrybut
process
elementu<application>
może ustawiać inne wartości domyślne dla wszystkich komponentów. Każdy komponent może jednak zastąpić wartość domyślną własnym atrybutemprocess
, co pozwala rozłożyć 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, a działanie jest w nim uruchamiane.Jeśli nazwa procesu zaczyna się od małej litery, działanie jest uruchamiane w globalnym procesie o tej nazwie, o ile ma do tego uprawnienia. Dzięki temu komponenty w różnych aplikacjach współużytkują proces, co zmniejsza wykorzystanie zasobów.
android:readPermission
Uprawnienie, które muszą mieć klienci w celu wysyłania zapytań do dostawcy treści.
Jeśli dostawca ustawi
android:grantUriPermissions
na"true"
lub jeśli dany klient spełnia warunki podelementu<grant-uri-permission>
, może uzyskać tymczasowy dostęp do odczytu danych dostawcy.Zobacz też atrybuty
permission
iwritePermission
.android:syncable
- Czy dane znajdujące się pod kontrolą dostawcy treści mogą być synchronizowane z danymi na serwerze?
"true"
, jeśli może, albo"false"
, jeśli nie. android:writePermission
Uprawnienie, którego klienci potrzebują, aby wprowadzać zmiany w danych kontrolowanych przez dostawcę treści.
Jeśli dostawca ustawi
android:grantUriPermissions
na"true"
lub jeśli dany klient spełnia warunki podelementu<grant-uri-permission>
, może on uzyskać tymczasowe uprawnienia do zapisu w celu modyfikowania danych dostawcy.Zobacz też atrybuty
permission
ireadPermission
.
- wprowadzone w:
- Poziom interfejsu API 1
- zobacz też:
- Dostawcy treści
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: 2024-04-02 UTC.
[]
[]
{
"last_modified": "Ostatnia aktualizacja: 2024-04-02 UTC.",
"state": ""
}