<provider>

sintassi:
<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>
contenuto in:
<application>
possono contenere:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property>
description:
Dichiara un componente fornitore di contenuti. Un content provider è una sottoclasse di ContentProvider che fornisce un accesso strutturato ai dati gestiti dall'applicazione. Tutti i content provider della tua applicazione devono essere definiti in un elemento <provider> nel file manifest. In caso contrario, il sistema non li rileva e non li esegue.

Dichiara solo i fornitori di contenuti che fanno parte della tua applicazione. Non dichiarare fornitori di contenuti in altre applicazioni che utilizzi nella tua applicazione.

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

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

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

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

Per informazioni sull'utilizzo e lo sviluppo dei fornitori di contenuti, vedi Fornitori di contenuti.

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

Non esiste un valore predefinito. È necessario specificare almeno un'autorità.

android:enabled
Se il fornitore di contenuti può essere istanziato dal sistema. È "true" se può esserlo e "false" in caso contrario. Il valore predefinito è "true".

L'elemento <application> ha un proprio attributo enabled che si applica a tutti i componenti dell'applicazione, inclusi i fornitori di contenuti. Affinché il fornitore di contenuti venga attivato, gli attributi <application> e <provider> devono essere "true", come sono entrambi per impostazione predefinita. Se uno dei due è "false", il provider è disattivato. Non può essere istanziato.

android:directBootAware

Se il fornitore di contenuti è compatibile con l'avvio diretto, ovvero se può essere eseguito prima che l'utente sblocchi il dispositivo.

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

Il valore predefinito è "false".

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

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

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

android:grantUriPermissions

Se le persone che normalmente non hanno l'autorizzazione per accedere ai dati del fornitore di contenuti possono ottenere l'autorizzazione per farlo, superando temporaneamente la limitazione imposta dagli attributi readPermission, writePermission, permission e exported.

È "true" se l'autorizzazione può essere concessa e "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 a un componente dell'applicazione l'accesso una tantum 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 dell'autorizzazione generale per esaminare tutti i dati del fornitore di contenuti.

In questi casi, l'autorizzazione viene concessa dai flag 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 in Intent passato a Context.startActivity(). L'autorizzazione è specifica per l'URI in Intent.

Se attivi questa funzionalità impostando questo attributo su "true" o definendo gli elementi secondari <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 è impostata, viene utilizzata l'icona specificata per l'applicazione nel suo complesso. Per ulteriori informazioni, consulta 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 ciascuno di essi garantisce che vengano creati nell'ordine richiesto da queste dipendenze. Il valore è un numero intero, con i numeri più alti inizializzati per primi.
android:intentMatchingFlags

Utilizza questo attributo per perfezionare il modo in cui il sistema associa gli intent in entrata ai componenti dell'app. Per impostazione predefinita, non vengono applicate regole di corrispondenza speciali.

Il valore impostato su un tag <provider> sostituisce il valore impostato sul tag <application>.

Il valore deve essere uno o più dei seguenti flag, separati da "|":

Flag Descrizione
none Disattiva tutte le regole di corrispondenza speciali per gli intent in entrata. Quando specifichi più flag, i valori in conflitto vengono risolti dando la precedenza al flag none.
enforceIntentFilter

Applica una corrispondenza più rigorosa per gli intent in entrata:

  • Gli intent espliciti devono corrispondere al filtro per intent del componente di destinazione.
  • Gli intent senza un'azione non corrispondono ad alcun filtro per intent.
allowNullAction

Rilassa le regole di corrispondenza per consentire la corrispondenza degli intent senza un'azione. Questo flag viene utilizzato insieme a enforceIntentFilter per ottenere il seguente comportamento:

  • Gli intent espliciti devono corrispondere al filtro per intent del componente di destinazione.
  • Gli intent senza un'azione possono corrispondere a qualsiasi filtro per intent.

Per ulteriori informazioni, consulta la sezione Intent più sicuri nelle modifiche al comportamento di Android 16 (livello API 36).

android:label
Un'etichetta leggibile dall'utente per i contenuti forniti. Se questo attributo non è impostato, viene utilizzata l'etichetta impostata per l'applicazione nel suo complesso. Per ulteriori informazioni, consulta l'attributo label dell'elemento <application>.

L'etichetta viene in genere impostata come riferimento a una risorsa stringa, in modo che possa essere localizzata come altre stringhe nell'interfaccia utente. Tuttavia, per comodità durante lo sviluppo dell'applicazione, può essere impostato anche come stringa non elaborata.

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

Se imposti questo flag su "true", puoi migliorare le prestazioni riducendo l'overhead della comunicazione interprocesso, ma aumenta anche l'impronta di memoria di ogni processo.

android:name
Il nome della classe che implementa il content provider, una sottoclasse di ContentProvider. Di solito si tratta di un nome di classe completo, ad esempio "com.example.project.TransportationProvider". Tuttavia, come abbreviazione, se il primo carattere del nome è un punto, viene aggiunto al nome del pacchetto specificato nell'elemento <manifest>.

Non esiste un valore predefinito. È necessario specificare il nome.

android:permission

Il nome di un'autorizzazione che i client devono avere per leggere o scrivere i dati del content provider. Questo attributo è un modo pratico per impostare una singola autorizzazione sia per la lettura che per la scrittura. Tuttavia, gli attributi readPermission, writePermission e grantUriPermissions hanno la precedenza su questo.

Se è impostato anche l'attributo readPermission, questo controlla l'accesso per l'interrogazione del fornitore di contenuti. Se l'attributo writePermission è impostato, controlla l'accesso per la modifica dei dati del fornitore.

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

android:process

Il nome del processo in cui viene eseguito il 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ò sostituire il valore predefinito con il proprio attributo process, consentendoti di distribuire l'applicazione su più processi.

Se il nome assegnato a questo attributo inizia con i due punti (:), viene creato un nuovo processo, privato per l'applicazione, quando è necessario 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 abbia l'autorizzazione per farlo. Ciò consente ai componenti di applicazioni diverse di condividere un processo, riducendo l'utilizzo delle risorse.

android:readPermission

Un'autorizzazione che i clienti devono avere per eseguire query sul fornitore di contenuti.

Se il fornitore imposta android:grantUriPermissions su "true" o se un determinato client soddisfa le condizioni di un elemento secondario <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
Se i dati sotto il controllo del fornitore di contenuti possono essere sincronizzati con i dati su un server. "true" se è possibile, "false" in caso contrario.
android:writePermission

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

Se il fornitore 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 scrittura temporaneo per modificare i dati del fornitore di contenuti.

Vedi anche gli attributi permission e readPermission.

introdotta in:
Livello API 1
Vedi anche:
Fornitori di contenuti