<provider>

:
<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>
contenuto in:
<application>
può contenere:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
description:
Dichiara un componente del fornitore di contenuti. Un fornitore di contenuti è una sottoclasse di ContentProvider che fornisce l'accesso strutturato ai dati gestiti dall'applicazione. Tutti i fornitori di contenuti nella tua applicazione devono essere definiti in un elemento <provider> nel file manifest. In caso contrario, il sistema non ne è a conoscenza e non le esegue.

Dichiara soltanto i fornitori di contenuti che fanno parte della tua applicazione. Non dichiarare i fornitori di contenuti in altre applicazioni che utilizzi nell'applicazione stessa.

Il sistema Android archivia i riferimenti ai fornitori di contenuti in base a una stringa authority, che fa parte dell'URI dei contenuti del fornitore. Ad esempio, supponiamo che tu voglia accedere a un fornitore di contenuti che memorizza le informazioni sui professionisti del settore sanitario. Per farlo, chiama il metodo ContentResolver.query(), che accetta, tra gli altri argomenti, un URI che identifica il provider:

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

Lo schema content: identifica l'URI come un URI di contenuto che rimanda a un fornitore di contenuti Android. L'autorità com.example.project.healthcareprovider identifica il provider stesso. Il sistema Android cerca le autorità nel suo elenco di fornitori noti e le loro autorità. La sottostringa nurses/rn è un percorso, che il fornitore di contenuti utilizza per identificare i sottoinsiemi di dati del provider.

Quando definisci il provider nell'elemento <provider>, non includi lo schema o il percorso nell'argomento android:name, ma solo l'autorità.

Per informazioni sull'utilizzo e lo sviluppo dei fornitori di contenuti, consulta la pagina Fornitori di contenuti.

:
android:authorities
Un elenco di una o più autorità URI che identificano i dati offerti dal fornitore di contenuti. Elenca più autorità separando i nomi con un punto e virgola. Per evitare conflitti, utilizza per i nomi delle autorità una convenzione di denominazione in stile Java, ad esempio com.example.provider.cartoonprovider. In genere, è il nome della sottoclasse ContentProvider che implementa il provider

Non esiste un'impostazione predefinita. È necessario specificare almeno un'autorità.

android:enabled
Indica se il fornitore di contenuti può creare un'istanza dal sistema. È "true" se può esserlo e "false" in caso contrario. Il valore predefinito è "true".

L'elemento <application> ha il proprio attributo enabled che si applica a tutti i componenti dell'applicazione, inclusi i fornitori di contenuti. Per poter abilitare il fornitore di contenuti, gli attributi <application> e <provider> devono essere entrambi "true", perché sono entrambi per impostazione predefinita. Se uno dei due è "false", il provider è disabilitato. Non è possibile creare un'istanza.

android:directBootAware

Indica se il fornitore di contenuti è consapevole all'avvio diretto, ovvero se può essere eseguito prima che l'utente sblocchi il dispositivo.

Nota: durante l'avvio diretto, un fornitore di contenuti nella tua applicazione può accedere soltanto ai dati archiviati nello spazio di archiviazione protetto dal dispositivo.

Il valore predefinito è "false".

android:exported
Indica se il fornitore di contenuti può essere utilizzato da altre applicazioni.
  • "true": il provider è disponibile per altre applicazioni. Qualsiasi applicazione può utilizzare l'URI dei contenuti del provider per accedervi, in base alle autorizzazioni specificate per il provider.
  • "false": il provider non è disponibile per altre applicazioni. Imposta android:exported="false" per limitare l'accesso del provider alle tue applicazioni. Vi hanno accesso solo le applicazioni che hanno lo stesso ID utente (UID) del provider o le applicazioni a cui è stato concesso temporaneamente l'accesso al provider tramite l'elemento android:grantUriPermissions.

Poiché questo attributo è stato introdotto nel livello API 17, tutti i dispositivi con livello API 16 e livello inferiore si comportano come se questo attributo fosse impostato "true". Se imposti android:targetSdkVersion su 17 o un valore superiore, il valore predefinito è "false" per i dispositivi che eseguono il livello API 17 e successivi.

Puoi impostare android:exported="false" e limitare comunque l'accesso al tuo provider impostando le autorizzazioni con l'attributo permission.

android:grantUriPermissions
A coloro che abitualmente non hanno l'autorizzazione ad accedere ai dati del fornitore di contenuti possono invece ricevere l'autorizzazione per farlo, superando temporaneamente la limitazione imposta dagli attributi readPermission, writePermission, permission e exported.

Il valore è "true" se è possibile concedere l'autorizzazione, "false" in caso contrario. Se "true", l'autorizzazione può essere concessa a qualsiasi dato del fornitore di contenuti. Se "false", l'autorizzazione può essere concessa solo ai sottoinsiemi di dati elencati negli elementi secondari <grant-uri-permission>, se presenti. Il valore predefinito è "false".

La concessione dell'autorizzazione è un modo per concedere l'accesso una tantum a un componente dell'applicazione ai dati protetti da un'autorizzazione. Ad esempio, quando un messaggio email contiene un allegato, l'applicazione di posta potrebbe chiamare il visualizzatore appropriato per aprirlo, anche se il visualizzatore non dispone delle autorizzazioni generali per visualizzare tutti i dati del fornitore di contenuti.

In questi casi, l'autorizzazione viene concessa da FLAG_GRANT_READ_URI_PERMISSION e FLAG_GRANT_WRITE_URI_PERMISSION nell'oggetto Intent che attiva il componente. Ad esempio, l'applicazione di posta potrebbe inserire FLAG_GRANT_READ_URI_PERMISSION nel Intent passato a Context.startActivity(). L'autorizzazione è specifica per l'URI in Intent.

Se abiliti questa funzionalità, impostando questo attributo su "true" o definendo i sottoelementi <grant-uri-permission>, chiama Context.revokeUriPermission() quando un URI coperto viene eliminato dal provider.

Vedi anche l'elemento <grant-uri-permission>.

android:icon
Un'icona che rappresenta il fornitore di contenuti. Questo attributo è impostato come riferimento a una risorsa disegnabile contenente la definizione dell'immagine. Se non è impostato, viene utilizzata l'icona specificata per l'applicazione nel suo insieme. Per ulteriori informazioni, vedi l'attributo icon dell'elemento <application>.
android:initOrder
L'ordine in cui viene creata l'istanza del fornitore di contenuti rispetto ad altri fornitori di contenuti ospitati dallo stesso processo. Quando esistono dipendenze tra i fornitori di contenuti, l'impostazione di questo attributo per ciascuna di esse garantisce che vengano create nell'ordine richiesto da tali dipendenze. Il valore è un numero intero, con i numeri più alti inizializzati per primi.
android:label
Un'etichetta leggibile per i contenuti forniti. Se questo attributo non è impostato, viene utilizzata l'etichetta impostata per l'applicazione nel suo insieme. Per ulteriori informazioni, consulta l'attributo label dell'elemento <application>.

L'etichetta è in genere impostata come riferimento a una risorsa stringa, in modo che possa essere localizzata come altre stringhe nell'interfaccia utente. Tuttavia, per praticità, durante lo sviluppo dell'applicazione, puoi anche impostare una stringa non elaborata.

android:multiprocess
Se l'app viene eseguita in più processi, questo attributo determina se vengono create più istanze del fornitore di contenuti. Se "true", ciascuno dei processi dell'app ha il proprio oggetto del fornitore di contenuti. Se "false", i processi dell'app condividono un solo oggetto del fornitore di contenuti. Il valore predefinito è "false".

L'impostazione di questo flag su "true" può migliorare le prestazioni riducendo l'overhead della comunicazione tra processi, ma aumenta anche l'impronta di memoria di ogni processo.

android:name
Il nome della classe che implementa il fornitore di contenuti, una sottoclasse di ContentProvider. In genere si tratta di un nome completo della classe, come "com.example.project.TransportationProvider". Tuttavia, per usare una forma abbreviata, se il primo carattere del nome è un punto, viene aggiunto al nome del pacchetto specificato nell'elemento <manifest>.

Non esiste un'impostazione predefinita. È necessario specificare il nome.

android:permission
Il nome di un'autorizzazione che i client devono avere per leggere o scrivere i dati del fornitore di contenuti. Questo attributo consente di impostare una singola autorizzazione sia per la lettura sia per la scrittura. Tuttavia, gli attributi readPermission, writePermission e grantUriPermissions hanno la precedenza su questo.

Se è impostato anche l'attributo readPermission, controlla l'accesso per eseguire query al fornitore di contenuti. Se l'attributo writePermission è impostato, controlla l'accesso per la modifica dei dati del provider.

Per ulteriori informazioni sulle autorizzazioni, consulta la sezione Autorizzazioni nella panoramica del file manifest dell'app e i suggerimenti per la sicurezza.

android:process
Il nome del processo utilizzato dal fornitore di contenuti. Normalmente, tutti i componenti di un'applicazione vengono eseguiti nel processo predefinito creato per l'applicazione. Ha lo stesso nome del pacchetto dell'applicazione.

L'attributo process dell'elemento <application> può impostare un valore predefinito diverso per tutti i componenti. Tuttavia, ogni componente può eseguire l'override del valore predefinito con il proprio attributo process, in modo da distribuire l'applicazione in più processi.

Se il nome assegnato a questo attributo inizia con i due punti (:), quando è necessario viene creato un nuovo processo privato per l'applicazione e l'attività viene eseguita in questo processo.

Se il nome del processo inizia con un carattere minuscolo, l'attività viene eseguita in un processo globale con quel nome, a condizione che disponga dell'autorizzazione necessaria. In questo modo i componenti di applicazioni diverse possono condividere un processo, riducendo l'utilizzo delle risorse.

android:readPermission

Autorizzazione che i clienti devono disporre per effettuare query sul fornitore di contenuti.

Se il provider imposta android:grantUriPermissions su "true" o se un determinato client soddisfa le condizioni di un sottoelemento <grant-uri-permission>, il client può ottenere l'accesso in lettura temporaneo ai dati del fornitore di contenuti.

Vedi anche gli attributi permission e writePermission.

android:syncable
Indica se i dati sotto il controllo del fornitore di contenuti possono essere sincronizzati con i dati su un server. È "true", se può esserlo, e "false" in caso contrario.
android:writePermission

Un'autorizzazione necessaria ai client per apportare modifiche ai dati controllati dal fornitore di contenuti.

Se il provider imposta android:grantUriPermissions su "true" o se un determinato client soddisfa le condizioni di un sottoelemento <grant-uri-permission>, il client può ottenere l'accesso temporaneo in scrittura per modificare i dati del fornitore di contenuti.

Vedi anche gli attributi permission e readPermission.

introdotto in:
Livello API 1
consulta anche:
Fornitori di contenuti