<fournisseur>

Syntaxe :
<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>
Contenu dans :
<application>
Peut contenir :
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property>
Description :
Déclare un composant de fournisseur de contenu. Un fournisseur de contenu est une sous-classe de ContentProvider qui fournit un accès structuré aux données gérées par l'application. Tous les fournisseurs de contenu de votre application doivent être définis dans un élément <provider> du fichier manifeste. Dans le cas contraire, le système ne les connaît pas et ne les exécute pas.

Ne déclarez que les fournisseurs de contenu qui font partie de votre application. Ne déclarez pas les fournisseurs de contenu d'autres applications que vous utilisez dans votre application.

Le système Android stocke les références aux fournisseurs de contenu en fonction d'une chaîne authority, qui fait partie de leur URI de contenu. Par exemple, supposons que vous souhaitiez accéder à un fournisseur de contenu qui stocke des informations sur les professionnels de santé. Pour ce faire, appelez la méthode ContentResolver.query() qui, entre autres arguments, prend un URI qui identifie le fournisseur :

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

Le schéma content: identifie l'URI en tant qu'URI de contenu pointant vers un fournisseur de contenu Android. L'élément "authority" com.example.project.healthcareprovider identifie le fournisseur lui-même. Le système Android recherche cet élément dans sa liste de fournisseurs connus et de leurs éléments "authority". La sous-chaîne nurses/rn est un chemin d'accès que le fournisseur de contenu utilise pour identifier des sous-ensembles de données du fournisseur.

Lorsque vous définissez votre fournisseur dans l'élément <provider>, vous n'incluez pas le schéma ni le chemin dans l'argument android:name, mais uniquement l'élément "authority".

Pour en savoir plus sur l'utilisation et le développement des fournisseurs de contenu, consultez Fournisseurs de contenu.

Attributs :
android:authorities
Liste d'un ou de plusieurs éléments "authority" d'URI qui identifient les données proposées par le fournisseur de contenu. Pour indiquer plusieurs éléments "authority", séparez leurs noms par un point-virgule. Pour éviter les conflits, utilisez une convention d'attribution de noms de style Java pour les noms d'éléments "authority", telle que com.example.provider.cartoonprovider. Il s'agit généralement du nom de la sous-classe ContentProvider qui implémente le fournisseur.

Il n'y a pas de valeur par défaut. Vous devez spécifier au moins un élément "authority".

android:enabled
Indique si le fournisseur de contenu peut être instancié par le système. "true" si tel est le cas, et "false" dans le cas contraire. La valeur par défaut est "true".

L'élément <application> possède son propre attribut enabled qui s'applique à tous les composants d'application, y compris les fournisseurs de contenu. Pour que le fournisseur de contenu puisse être activé, les attributs <application> et <provider> doivent être tous les deux définis sur "true" (car ils sont par défaut). Si l'une des valeurs est "false", le fournisseur est désactivé. Elle ne peut pas être instanciée.

android:directBootAware

Indique si le fournisseur de contenu est compatible avec le démarrage direct, c'est-à-dire s'il peut s'exécuter avant que l'utilisateur déverrouille l'appareil.

Remarque : Pendant le démarrage direct, un fournisseur de contenu de votre application ne peut accéder qu'aux données stockées dans l'espace de stockage protégé par l'appareil.

La valeur par défaut est "false".

android:exported
Indique si le fournisseur de contenu est disponible pour d'autres applications.
  • "true" : le fournisseur est disponible pour d'autres applications. Toute application peut utiliser l'URI de contenu du fournisseur pour y accéder, sous réserve des autorisations spécifiées par celui-ci.
  • "false" : le fournisseur n'est pas disponible pour d'autres applications. Définissez android:exported="false" pour limiter l'accès du fournisseur à vos applications. Seules les applications ayant le même ID utilisateur (UID) que le fournisseur, ou les applications qui ont été temporairement autorisées à accéder au fournisseur via l'élément android:grantUriPermissions y ont accès.

Comme cet attribut a été introduit au niveau d'API 17, tous les appareils exécutant un niveau d'API 16 ou inférieur se comportent comme si cet attribut était défini sur "true". Si vous définissez android:targetSdkVersion sur 17 ou plus, la valeur par défaut est "false" pour les appareils exécutant le niveau d'API 17 ou supérieur.

Vous pouvez définir android:exported="false" tout en limitant l'accès à votre fournisseur en définissant des autorisations avec l'attribut permission.

android:grantUriPermissions

Indique si ceux qui n'ont pas accès d'habitude aux données du fournisseur de contenu peuvent y accéder ou non, en levant temporairement la restriction imposée par les attributs readPermission, writePermission, permission et exported.

"true" si l'autorisation peut être accordée, et "false" dans le cas contraire. Si la valeur est "true", l'autorisation peut être accordée pour n'importe quelle donnée du fournisseur de contenu. Si la valeur est "false", l'autorisation ne peut être accordée que pour les sous-ensembles de données répertoriés dans les sous-éléments <grant-uri-permission>, le cas échéant. La valeur par défaut est "false".

L'autorisation est un moyen d'accorder à un composant d'application un accès ponctuel aux données protégées par une autorisation. Par exemple, lorsqu'un e-mail contient une pièce jointe, l'application peut appeler le lecteur approprié pour l'ouvrir, même s'il ne dispose pas de l'autorisation générale pour consulter toutes les données du fournisseur de contenu.

Dans ce cas, l'autorisation est accordée par les options FLAG_GRANT_READ_URI_PERMISSION et FLAG_GRANT_WRITE_URI_PERMISSION de l'objet Intent qui active le composant. Par exemple, l'application de messagerie peut placer FLAG_GRANT_READ_URI_PERMISSION dans le Intent transmis à Context.startActivity(). L'autorisation est spécifique à l'URI de Intent.

Si vous activez cette fonctionnalité, en définissant cet attribut sur "true" ou en définissant des sous-éléments <grant-uri-permission>, appelez Context.revokeUriPermission() lorsqu'un URI couvert est supprimé du fournisseur.

Consultez également l'élément <grant-uri-permission>.

android:icon
Icône représentant le fournisseur de contenu. Cet attribut est défini comme référence à une ressource drawable contenant la définition de l'image. Si cette valeur n'est pas définie, l'icône spécifiée pour l'application dans son ensemble est utilisée à la place. Pour en savoir plus, consultez l'attribut icon de l'élément <application>.
android:initOrder
Ordre dans lequel le fournisseur de contenu est instancié par rapport aux autres fournisseurs de contenu hébergés par le même processus. En cas de dépendances entre fournisseurs de contenu, la définition de cet attribut pour chacun d'eux garantit leur création dans l'ordre requis par ces dépendances. La valeur est un entier, les nombres les plus élevés étant initialisés en premier.
android:intentMatchingFlags

Utilisez cet attribut pour affiner la façon dont le système fait correspondre les intents entrants aux composants d'application. Par défaut, aucune règle de correspondance spéciale n'est appliquée.

La valeur définie sur une balise <provider> remplace celle définie sur la balise <application>.

La valeur doit correspondre à un ou plusieurs des indicateurs suivants, séparés par "|" :

Option Description
none Désactive toutes les règles de correspondance spéciales pour les intents entrants. Lorsque vous spécifiez plusieurs indicateurs, les valeurs conflictuelles sont résolues en donnant la priorité à l'indicateur none.
enforceIntentFilter

Applique une correspondance plus stricte pour les intents entrants :

  • Les intents explicites doivent correspondre au filtre d'intent du composant cible.
  • Les intents sans action ne correspondent à aucun filtre d'intent.
allowNullAction

Assouplit les règles de correspondance pour autoriser la correspondance des intents sans action. Cette option est utilisée conjointement avec enforceIntentFilter pour obtenir le comportement suivant :

  • Les intents explicites doivent correspondre au filtre d'intent du composant cible.
  • Les intents sans action sont autorisés à correspondre à n'importe quel filtre d'intent.

Pour en savoir plus, consultez la section Intents plus sécurisés dans les changements de comportement d'Android 16 (niveau d'API 36).

android:label
Libellé lisible pour le contenu fourni. Si cet attribut n'est pas défini, le libellé défini pour l'application dans son ensemble est utilisé à la place. Pour en savoir plus, consultez l'attribut label de l'élément <application>.

Le libellé est généralement défini comme une référence à une ressource de chaîne, de sorte qu'il puisse être localisé comme les autres chaînes de l'interface utilisateur. Toutefois, lorsque vous développez l'application, vous pouvez également le définir comme une chaîne brute.

android:multiprocess
Si l'application s'exécute dans plusieurs processus, cet attribut détermine si plusieurs instances du fournisseur de contenu sont créées. Si la valeur est "true", chacun des processus de l'application possède son propre objet de fournisseur de contenu. Si la valeur est "false", les processus de l'application ne partagent qu'un objet de fournisseur de contenu. La valeur par défaut est "false".

Définir cet indicateur sur "true" peut améliorer les performances en réduisant la surcharge des communications entre les processus, mais aussi augmenter l'encombrement de la mémoire pour chaque processus.

android:name
Nom de la classe qui implémente le fournisseur de contenu, une sous-classe de ContentProvider. Il s'agit généralement d'un nom de classe complet, tel que "com.example.project.TransportationProvider". Cependant, pour faire court, si le premier caractère du nom est un point, il est ajouté au nom du package spécifié dans l'élément <manifest>.

Il n'y a pas de valeur par défaut. Vous devez renseigner le nom.

android:permission

Nom d'une autorisation que les clients doivent avoir pour lire ou écrire les données du fournisseur de contenu. Cet attribut offre un moyen pratique de définir une seule autorisation pour la lecture et l'écriture. Toutefois, les attributs readPermission, writePermission et grantUriPermissions sont prioritaires sur celui-ci.

Si l'attribut readPermission est également défini, il contrôle l'accès pour interroger le fournisseur de contenu. Si l'attribut writePermission est défini, il contrôle l'accès afin de modifier les données du fournisseur.

Pour en savoir plus sur les autorisations, consultez la section Autorisations dans la présentation du fichier manifeste d'application et les conseils de sécurité.

android:process

Nom du processus dans lequel le fournisseur de contenu s'exécute. Normalement, tous les composants d'une application s'exécutent dans le processus par défaut créé pour celle-ci. Il porte le même nom que le package de l'application.

L'attribut process de l'élément <application> peut définir une valeur par défaut différente pour tous les composants. Toutefois, chaque composant peut remplacer la valeur par défaut par son propre attribut process, ce qui vous permet de répartir votre application sur plusieurs processus.

Si le nom assigné à cet attribut commence par le signe deux-points (:), un processus réservé à l'application est créé lorsque cela est nécessaire, et l'activité est exécutée dans ce processus.

Si le nom du processus commence par une lettre minuscule, l'activité sera exécutée dans un processus global du même nom, à condition qu'elle soit autorisée à le faire. Cela permet aux composants de différentes applications de partager un processus, ce qui réduit l'utilisation des ressources.

android:readPermission

Autorisation que les clients doivent avoir pour interroger le fournisseur de contenu.

Si le fournisseur définit android:grantUriPermissions à"true", ou si un client donné remplit les conditions d'un sous-élément <grant-uri-permission>, le client peut obtenir un accès en lecture temporaire aux données du fournisseur de contenu.

Consultez également les attributs permission et writePermission.

android:syncable
Indique si les données sous le contrôle du fournisseur de contenu peuvent être synchronisées avec les données d'un serveur. "true" si tel est le cas, et "false" dans le cas contraire.
android:writePermission

Autorisation dont les clients ont besoin pour modifier les données contrôlées par le fournisseur de contenu.

Si le fournisseur définit android:grantUriPermissions à"true", ou si un client donné remplit les conditions d'un sous-élément <grant-uri-permission>, le client peut obtenir un accès en écriture temporaire pour modifier les données du fournisseur de contenu.

Consultez également les attributs permission et readPermission.

Première apparition :
Niveau d'API 1
Voir aussi :
Fournisseurs de contenu