Condividi tramite


Funzionamento dei provider di contenuti

Esistono due classi coinvolte in un'interazione ContentProvider :

  • ContentProvider : implementa un'API che espone un set di dati in modo standard. I metodi principali sono Query, Insert, Update ed Delete.

  • ContentResolver : proxy statico che comunica con un ContentProvider oggetto per accedere ai dati, dall'interno della stessa applicazione o da un'altra applicazione.

Un provider di contenuti è in genere supportato da un database SQLite, ma l'API significa che l'utilizzo del codice non deve conoscere nulla sul database SQL sottostante. Le query vengono eseguite tramite un URI usando costanti per fare riferimento ai nomi di colonna (per ridurre le dipendenze dalla struttura dei dati sottostanti) e viene restituito un ICursor oggetto per l'iterazione del codice di utilizzo.

Utilizzo di un contentProvider

ContentProviders esporre la funzionalità tramite un URI registrato nella AndroidManifest.xml dell'applicazione che pubblica i dati. Esiste una convenzione in cui l'URI e le colonne di dati esposte devono essere disponibili come costanti per semplificare l'associazione ai dati. Tutte le classi predefinite di ContentProviders Android offrono costanti che fanno riferimento alla struttura dei dati nello spazio dei Android.Providers nomi.

Provider predefiniti

Android offre l'accesso a un'ampia gamma di dati di sistema e utente usando ContentProviders:

  • Browser : segnalibri e cronologia del browser (richiede l'autorizzazione READ_HISTORY_BOOKMARKS e/o WRITE_HISTORY_BOOKMARKS).

  • CallLog : chiamate recenti effettuate o ricevute con il dispositivo.

  • Contatti : informazioni dettagliate dall'elenco contatti dell'utente, tra cui persone, telefoni, foto e gruppi.

  • MediaStore : contenuti del dispositivo dell'utente: audio (album, artisti, generi, playlist), immagini (incluse le anteprime) e video.

  • Impostazioni: impostazioni e preferenze del dispositivo a livello di sistema.

  • UserDictionary : contenuto del dizionario definito dall'utente usato per l'input di testo predittivo.

  • Segreteria telefonica : cronologia dei messaggi vocali.

Cenni preliminari sulle classi

Le classi primarie usate quando si lavora con un ContentProvider sono illustrate di seguito:

Class diagram of Content Provider application and Consuming application interactions

In questo diagramma implementa ContentProvider query e registra l'URI usato da altre applicazioni per individuare i dati. funge ContentResolver da "proxy" per i ContentProvider metodi (metodi Query, Insert, Update e Delete). SQLiteOpenHelper Contiene i dati usati da ContentProvider, ma non sono esposti direttamente all'utilizzo delle app. Passa CursorAdapter il cursore restituito dall'oggetto ContentResolver da visualizzare in un oggetto ListView. UriMatcher è una classe helper che analizza gli URI durante l'elaborazione delle query.

Lo scopo di ogni classe è descritto di seguito:

  • ContentProvider : implementare i metodi di questa classe astratta per esporre i dati. L'API viene resa disponibile per altre classi e applicazioni tramite l'attributo Uri aggiunto alla definizione della classe.

  • SQLiteOpenHelper : consente di implementare l'archivio dati SQLite esposto da ContentProvider.

  • UriMatcher : usare UriMatcher nell'implementazione ContentProvider per gestire gli URI usati per eseguire query sul contenuto.

  • ContentResolver : l'utilizzo del codice usa un ContentResolver oggetto per accedere a un'istanza ContentProvider di . Le due classi si occupano insieme dei problemi di comunicazione tra processi, consentendo la condivisione dei dati tra le applicazioni. L'utilizzo di codice non crea mai una ContentProvider classe esplicita. I dati vengono invece accessibili creando un cursore basato su un URI esposto dall'applicazione ContentProvider .

  • CursorAdapter : usare CursorAdapter o SimpleCursorAdapter per visualizzare i dati a cui si accede tramite un oggetto ContentProvider.

L'API ContentProvider consente ai consumer di eseguire un'ampia gamma di operazioni sui dati, ad esempio:

  • Eseguire query sui dati per restituire elenchi o singoli record.
  • Modificare i singoli record.
  • Aggiungere nuovi record.
  • Eliminare i record.

Questo documento contiene un esempio che usa un oggetto fornito dal ContentProvidersistema, nonché un semplice esempio di sola lettura che implementa un oggetto personalizzato ContentProvider.