<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: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ąd com.example.project.healthcareprovider identyfikuje samego dostawcę. System Android wyszukuje urząd na liście znanych dostawców i ich urzędów. Podłańcuch nurses/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 argumencie android: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 podklasy ContentProvider, 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 atrybut enabled, 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. Ustaw android: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ą elementu android: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 ustawisz android: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ą atrybutu permission.

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 i exported.

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 i FLAG_GRANT_WRITE_URI_PERMISSION w obiekcie Intent przyznają uprawnienia, które aktywują komponent. Aplikacja pocztowa może na przykład umieścić FLAG_GRANT_READ_URI_PERMISSION w elemencie Intent przekazywanym do Context.startActivity(). Uprawnienia dotyczą identyfikatora URI w komponencie Intent.

Jeśli włączysz tę funkcję, albo ustawiając w tym atrybucie wartość "true" lub definiując elementy podrzędne <grant-uri-permission>, wywołaj Context.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 i grantUriPermissions 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 atrybut writePermission, 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 atrybutem process, 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 i writePermission.

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 i readPermission.

wprowadzone w:
Poziom interfejsu API 1
zobacz też:
Dostawcy treści