- :
-
<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 sottostringanurses/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'argomentoandroid: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 sottoclasseContentProvider
che implementa il providerNon 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 attributoenabled
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. Impostaandroid: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'elementoandroid: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 impostiandroid: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'attributopermission
. -
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
eexported
.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
eFLAG_GRANT_WRITE_URI_PERMISSION
nell'oggettoIntent
che attiva il componente. Ad esempio, l'applicazione di posta potrebbe inserireFLAG_GRANT_READ_URI_PERMISSION
nelIntent
passato aContext.startActivity()
. L'autorizzazione è specifica per l'URI inIntent
.Se abiliti questa funzionalità, impostando questo attributo su
"true"
o definendo i sottoelementi<grant-uri-permission>
, chiamaContext.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
egrantUriPermissions
hanno la precedenza su questo.Se è impostato anche l'attributo
readPermission
, controlla l'accesso per eseguire query al fornitore di contenuti. Se l'attributowritePermission
è 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 attributoprocess
, 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
ewritePermission
.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
ereadPermission
.
- introdotto in:
- Livello API 1
- consulta anche:
- Fornitori di contenuti
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2023-10-18 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Mancano le informazioni di cui ho bisogno"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Troppo complicato/troppi passaggi"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Obsoleti"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Problema di traduzione"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Problema relativo a esempi/codice"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Altra"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Facile da capire"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Il problema è stato risolto"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Altra"
}]
{
"last_modified": "Ultimo aggiornamento 2023-10-18 UTC.",
"state": ""
}