<provider>

Syntax:
<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>
Enthalten in:
<application>
kann Folgendes enthalten:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property>
Beschreibung:
Deklariert eine Contentanbieter-Komponente. Ein Contentanbieter ist eine Unterklasse von ContentProvider, die strukturierten Zugriff auf Daten ermöglicht, die von der Anwendung verwaltet werden. Alle Contentanbieter in Ihrer Anwendung müssen in einem <provider>-Element in der Manifestdatei definiert werden. Andernfalls sind sie dem System nicht bekannt und werden nicht ausgeführt.

Geben Sie nur Contentanbieter an, die Teil Ihrer Anwendung sind. Deklarieren Sie keine Contentanbieter in anderen Anwendungen, die Sie in Ihrer Anwendung verwenden.

Das Android-System speichert Verweise auf Contentanbieter anhand eines authority-Strings, der Teil des Content-URI des Anbieters ist. Angenommen, Sie möchten auf einen Inhaltsanbieter zugreifen, der Informationen zu medizinischen Fachkräften speichert. Rufen Sie dazu die Methode ContentResolver.query() auf, die unter anderem einen URI akzeptiert, der den Anbieter identifiziert:

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

Das content:-Schema kennzeichnet den URI als Content-URI, der auf einen Android-Contentanbieter verweist. Die Autorität com.example.project.healthcareprovider identifiziert den Anbieter selbst. Das Android-System sucht in seiner Liste bekannter Anbieter und ihrer Berechtigungen nach der Berechtigung. Der Teilstring nurses/rn ist ein Pfad, mit dem der Inhaltsanbieter Teilmengen der Anbieterdaten identifiziert.

Wenn Sie Ihren Anbieter im <provider>-Element definieren, geben Sie im android:name-Argument nicht das Schema oder den Pfad an, sondern nur die Autorität.

Informationen zur Verwendung und Entwicklung von Contentanbietern finden Sie unter Contentanbieter.

Attribute:
android:authorities
Eine Liste mit einem oder mehreren URI-Autoritäten, die vom Contentanbieter angebotene Daten identifizieren. Wenn Sie mehrere Behörden angeben möchten, trennen Sie die Namen durch ein Semikolon. Um Konflikte zu vermeiden, verwenden Sie für Autoritätsnamen eine Namenskonvention im Java-Stil, z. B. com.example.provider.cartoonprovider. In der Regel ist es der Name der ContentProvider-Unterklasse, die den Anbieter implementiert.

Es gibt keine Standardeinstellung. Es muss mindestens eine Behörde angegeben werden.

android:enabled
Gibt an, ob der Contentanbieter vom System instanziiert werden kann. "true", wenn es möglich ist, und "false", wenn nicht. Der Standardwert ist "true".

Das <application>-Element hat ein eigenes enabled-Attribut, das für alle Anwendungskomponenten gilt, einschließlich Contentanbietern. Die Attribute <application> und <provider> müssen beide "true" sein, da sie standardmäßig beide "true" sind, damit der Content-Anbieter aktiviert wird. Wenn einer der beiden Werte "false" ist, ist der Anbieter deaktiviert. Sie kann nicht instanziiert werden.

android:directBootAware

Gibt an, ob der Contentanbieter Direct-Boot-fähig ist, d. h., ob er ausgeführt werden kann, bevor der Nutzer das Gerät entsperrt.

Hinweis : Während des Direktstarts kann ein Contentanbieter in Ihrer Anwendung nur auf die Daten zugreifen, die im geräteschutzgesicherten Speicher gespeichert sind.

Der Standardwert ist "false".

android:exported
Gibt an, ob der Contentanbieter für andere Anwendungen verfügbar ist.
  • "true": Der Anbieter ist für andere Anwendungen verfügbar. Jede Anwendung kann über den Content-URI des Anbieters auf die Inhalte zugreifen, sofern die für den Anbieter angegebenen Berechtigungen dies zulassen.
  • "false": Der Anbieter ist für andere Anwendungen nicht verfügbar. Legen Sie android:exported="false" fest, um den Zugriff auf den Anbieter auf Ihre Anwendungen zu beschränken. Nur Anwendungen, die dieselbe Nutzer-ID (UID) wie der Anbieter haben, oder Anwendungen, denen über das Element android:grantUriPermissions vorübergehend Zugriff auf den Anbieter gewährt wird, haben Zugriff darauf.

Da dieses Attribut in API‑Level 17 eingeführt wurde, verhalten sich alle Geräte mit API‑Level 16 und niedriger so, als wäre dieses Attribut auf "true" festgelegt. Wenn Sie android:targetSdkVersion auf 17 oder höher festlegen, ist der Standardwert "false" für Geräte mit API-Level 17 und höher.

Sie können android:exported="false" festlegen und den Zugriff auf Ihren Anbieter trotzdem einschränken, indem Sie Berechtigungen mit dem Attribut permission festlegen.

android:grantUriPermissions

Ob Personen, die normalerweise nicht berechtigt sind, auf die Daten des Content-Anbieters zuzugreifen, die Berechtigung dazu erhalten können, wodurch die Einschränkung durch die Attribute readPermission, writePermission, permission und exported vorübergehend aufgehoben wird.

Der Wert ist "true", wenn die Berechtigung erteilt werden kann, und "false", wenn nicht. Bei "true" kann die Berechtigung für alle Daten des Content-Anbieters erteilt werden. Wenn "false", kann die Berechtigung nur für die in <grant-uri-permission>-Unterelementen aufgeführten Datenteilmengen erteilt werden, sofern vorhanden. Der Standardwert ist "false".

Wenn Sie eine Berechtigung erteilen, gewähren Sie einer Anwendungskomponente einmaligen Zugriff auf Daten, die durch eine Berechtigung geschützt sind. Wenn eine E‑Mail beispielsweise einen Anhang enthält, ruft die E‑Mail-Anwendung möglicherweise den entsprechenden Viewer auf, um ihn zu öffnen, obwohl der Viewer keine allgemeine Berechtigung hat, alle Daten des Content-Anbieters anzusehen.

In solchen Fällen wird die Berechtigung durch die Flags FLAG_GRANT_READ_URI_PERMISSION und FLAG_GRANT_WRITE_URI_PERMISSION im Intent-Objekt gewährt, mit denen die Komponente aktiviert wird. Die E‑Mail-Anwendung kann beispielsweise FLAG_GRANT_READ_URI_PERMISSION in den Intent-Parameter einfügen, der an Context.startActivity() übergeben wird. Die Berechtigung gilt nur für den URI in der Intent.

Wenn Sie diese Funktion aktivieren, indem Sie entweder dieses Attribut auf "true" setzen oder <grant-uri-permission>-Unterelemente definieren, rufen Sie Context.revokeUriPermission() auf, wenn eine abgedeckte URI aus dem Anbieter gelöscht wird.

Weitere Informationen finden Sie unter dem <grant-uri-permission>-Element.

android:icon
Ein Symbol, das den Content-Anbieter darstellt. Dieses Attribut wird als Referenz auf eine zeichenfähige Ressource festgelegt, die die Bilddefinition enthält. Wenn es nicht festgelegt ist, wird stattdessen das für die Anwendung als Ganzes angegebene Symbol verwendet. Weitere Informationen finden Sie im <application>-Element unter dem Attribut icon.
android:initOrder
Die Reihenfolge, in der der Contentanbieter im Verhältnis zu anderen Contentanbietern, die vom selben Prozess gehostet werden, instanziiert wird. Wenn Abhängigkeiten zwischen Content-Anbietern bestehen, wird durch Festlegen dieses Attributs für jeden von ihnen sichergestellt, dass sie in der Reihenfolge erstellt werden, die für diese Abhängigkeiten erforderlich ist. Der Wert ist eine Ganzzahl. Höhere Zahlen werden zuerst initialisiert.
android:intentMatchingFlags

Mit diesem Attribut können Sie genauer festlegen, wie das System eingehende Intents mit App-Komponenten abgleicht. Standardmäßig werden keine speziellen Abgleichsregeln angewendet.

Der für ein <provider>-Tag festgelegte Wert überschreibt den für das <application>-Tag festgelegten Wert.

Der Wert muss einer oder mehrere der folgenden Flags sein, die durch „|“ getrennt sind:

Flag Beschreibung
none Deaktiviert alle speziellen Abgleichsregeln für eingehende Intents. Wenn Sie mehrere Flags angeben, werden widersprüchliche Werte aufgelöst, indem dem Flag none Vorrang eingeräumt wird.
enforceIntentFilter

Erzwingt einen strengeren Abgleich für eingehende Intents:

  • Explizite Intents müssen mit dem Intent-Filter der Zielkomponente übereinstimmen.
  • Intents ohne Aktion entsprechen keinem Intent-Filter.
allowNullAction

Die Abgleichsregeln werden gelockert, sodass auch Intents ohne Aktion abgeglichen werden können. Dieses Flag wird in Verbindung mit enforceIntentFilter verwendet, um das folgende Verhalten zu erzielen:

  • Explizite Intents müssen mit dem Intent-Filter der Zielkomponente übereinstimmen.
  • Intents ohne Aktion dürfen mit jedem Intent-Filter übereinstimmen.

Weitere Informationen finden Sie im Abschnitt Safer Intents (Sicherere Intents) unter „Verhaltensänderungen in Android 16 (API-Level 36)“.

android:label
Ein für Nutzer lesbares Label für die bereitgestellten Inhalte. Wenn dieses Attribut nicht festgelegt ist, wird stattdessen das für die Anwendung als Ganzes festgelegte Label verwendet. Weitere Informationen finden Sie im label-Attribut des <application>-Elements.

Das Label wird in der Regel als Verweis auf eine String-Ressource festgelegt, damit es wie andere Strings in der Benutzeroberfläche lokalisiert werden kann. Während Sie die Anwendung entwickeln, kann sie jedoch auch als Raw-String festgelegt werden.

android:multiprocess
Wenn die App in mehreren Prozessen ausgeführt wird, bestimmt dieses Attribut, ob mehrere Instanzen des Contentanbieters erstellt werden. Wenn "true", hat jeder Prozess der App ein eigenes Contentanbieter-Objekt. Wenn "false", verwenden die Prozesse der App nur ein Contentanbieter-Objekt. Der Standardwert ist "false".

Wenn Sie dieses Flag auf "true" setzen, kann die Leistung verbessert werden, da der Overhead der Interprozesskommunikation verringert wird. Allerdings wird dadurch auch der Speicherbedarf der einzelnen Prozesse erhöht.

android:name
Der Name der Klasse, die den Contentanbieter implementiert, eine Unterklasse von ContentProvider. Dies ist in der Regel ein vollständig qualifizierter Klassenname, z. B. "com.example.project.TransportationProvider". Wenn das erste Zeichen des Namens ein Punkt ist, wird es an den im <manifest>-Element angegebenen Paketnamen angehängt.

Es gibt keine Standardeinstellung. Der Name muss angegeben werden.

android:permission

Der Name einer Berechtigung, die Clients zum Lesen oder Schreiben der Daten des Contentanbieters benötigen. Mit diesem Attribut können Sie eine einzelne Berechtigung für Lese- und Schreibvorgänge festlegen. Die Attribute readPermission, writePermission und grantUriPermissions haben jedoch Vorrang.

Wenn das Attribut readPermission ebenfalls festgelegt ist, wird damit der Zugriff für das Abfragen des Content-Anbieters gesteuert. Wenn das Attribut writePermission festgelegt ist, wird der Zugriff zum Ändern der Daten des Anbieters gesteuert.

Weitere Informationen zu Berechtigungen finden Sie im Abschnitt Berechtigungen in der Übersicht zum App-Manifest und unter Sicherheitstipps.

android:process

Der Name des Prozesses, in dem der Contentanbieter ausgeführt wird. Normalerweise werden alle Komponenten einer Anwendung im Standardprozess ausgeführt, der für die Anwendung erstellt wurde. Er hat denselben Namen wie das Anwendungspaket.

Mit dem Attribut process des Elements <application> kann ein anderer Standardwert für alle Komponenten festgelegt werden. Jede Komponente kann den Standardwert jedoch mit ihrem eigenen process-Attribut überschreiben, sodass Sie Ihre Anwendung auf mehrere Prozesse verteilen können.

Wenn der Name, der diesem Attribut zugewiesen ist, mit einem Doppelpunkt (:) beginnt, wird bei Bedarf ein neuer Prozess erstellt, der für die Anwendung privat ist, und die Aktivität wird in diesem Prozess ausgeführt.

Wenn der Prozessname mit einem Kleinbuchstaben beginnt, wird die Aktivität in einem globalen Prozess mit diesem Namen ausgeführt, sofern sie die entsprechende Berechtigung hat. So können Komponenten in verschiedenen Anwendungen einen Prozess gemeinsam nutzen, was den Ressourcenverbrauch verringert.

android:readPermission

Eine Berechtigung, die Clients benötigen, um den Contentanbieter abzufragen.

Wenn der Anbieter android:grantUriPermissions auf "true" setzt oder ein bestimmter Client die Bedingungen eines <grant-uri-permission>-Unterelements erfüllt, kann der Client vorübergehenden Lesezugriff auf die Daten des Contentanbieters erhalten.

Siehe auch die Attribute permission und writePermission.

android:syncable
Gibt an, ob die Daten, die vom Contentanbieter kontrolliert werden, mit Daten auf einem Server synchronisiert werden können. "true", wenn das möglich ist, und "false", wenn nicht.
android:writePermission

Eine Berechtigung, die Clients benötigen, um Änderungen an den Daten vorzunehmen, die vom Content-Anbieter kontrolliert werden.

Wenn der Anbieter android:grantUriPermissions auf "true" setzt oder ein bestimmter Client die Bedingungen eines <grant-uri-permission>-Unterelements erfüllt, kann der Client vorübergehenden Schreibzugriff erhalten, um die Daten des Contentanbieters zu ändern.

Siehe auch die Attribute permission und readPermission.

Eingeführt in:
API‑Level 1
Siehe auch:
Contentanbieter