Freigeben über


Funktionsweise von Inhaltsanbietern

An einer ContentProvider-Interaktion sind zwei Klassen beteiligt:

  • ContentProvider – Implementiert eine API, die eine Reihe von Daten standardmäßig verfügbar macht. Die wichtigsten Methoden sind Query, Insert, Update und Delete.

  • ContentResolver – Ein statischer Proxy, der mit einem ContentProvider Proxy kommuniziert, um auf seine Daten zuzugreifen, entweder innerhalb derselben Anwendung oder aus einer anderen Anwendung.

Ein Inhaltsanbieter wird in der Regel durch eine SQLite-Datenbank unterstützt, durch die API muss der nutzende Code den zugrunde liegenden SQL-Code jedoch nicht kennen. Abfragen über einen URI verwenden Konstanten zum Verweisen auf Spaltennamen (um die Abhängigkeiten in der zugrunde liegenden Datenstruktur zu reduzieren), und es wird ein ICursor zurückgegeben, den der nutzende Code durchlaufen kann.

Nutzen eines ContentProvider

ContentProviders machen ihre Funktionalität über einen URI verfügbar, der in der AndroidManifest.xml-Datei der Anwendung registriert ist, die die Daten veröffentlicht. Es gibt eine Konvention, der zufolge der URI und die Datenspalten als Konstanten verfügbar gemacht werden sollten, um die Bindung an die Daten zu vereinfachen. Alle integrierten ContentProviders von Android stellen Hilfsklassen mit Konstanten bereit, die auf die Datenstruktur im Namespace Android.Providers verweisen.

Integrierte Anbieter

Android bietet über ContentProviders Zugriff auf eine umfassende Palette an System- und Benutzerdaten:

  • Browser – Lesezeichen und Browserverlauf (erfordert Berechtigung READ_HISTORY_BOOKMARKS und/oder WRITE_HISTORY_BOOKMARKS).

  • CallLog – zuletzt getätigte oder empfangene Anrufe mit dem Gerät.

  • Kontakte – detaillierte Informationen aus der Kontaktliste des Benutzers, einschließlich Personen, Telefonen, Fotos und Gruppen.

  • MediaStore – Inhalte des Geräts des Benutzers: Audio (Alben, Künstler, Genres, Wiedergabelisten), Bilder (einschließlich Miniaturansichten) und Video.

  • Einstellungen – systemweite Geräteeinstellungen und -einstellungen.

  • UserDictionary – Inhalt des benutzerdefinierten Wörterbuchs, das für die Vorhersage von Texteingaben verwendet wird.

  • Voicemail – Verlauf von Voicemailnachrichten.

Übersicht über Klassen

Im Folgenden finden Sie die wichtigsten Klassen für die Arbeit mit einem ContentProvider:

Class diagram of Content Provider application and Consuming application interactions

In diesem Diagramm implementiert der ContentProvider Abfragen und registriert URIs, die andere Anwendungen zum Auffinden von Daten verwenden. Der ContentResolver fungiert als „Proxy“ zum ContentProvider (Methoden: „Query“, „Insert“, „Update“ und „Delete“). Der SQLiteOpenHelper enthält Daten, die vom ContentProvider verwendet werden, ist für nutzende Apps aber nicht direkt verfügbar. Der CursorAdapter übergibt den vom ContentResolver zurückgegebenen Cursor, um Inhalte in einer ListView anzuzeigen. Der UriMatcher ist eine Hilfsklasse, die bei der Verarbeitung von Abfragen URIs analysiert.

Im Folgenden wird der Zweck der einzelnen Klassen beschrieben:

  • ContentProvider – Implementieren Sie die Methoden dieser abstrakten Klasse, um Daten verfügbar zu machen. Die API wird über das URI-Attribut, das der Klassendefinition hinzugefügt wird, für andere Klassen und Anwendungen zur Verfügung gestellt.

  • SQLiteOpenHelper – Unterstützt die Implementierung des SQLite-Datenspeichers, der von der ContentProvider.

  • UriMatcher – Verwenden Sie UriMatcher in Ihrer ContentProvider Implementierung, um URIs zu verwalten, die zum Abfragen des Inhalts verwendet werden.

  • ContentResolver – Der Verbrauch von Code verwendet einen ContentResolver , um auf eine ContentProvider Instanz zuzugreifen. Diese beiden Klassen verarbeiten zusammen die Kommunikation zwischen den Prozessen, sodass Daten einfacher von mehreren Anwendungen gemeinsam genutzt werden können. Der nutzende Code erstellt niemals explizit eine ContentProvider-Klasse; stattdessen erfolgt der Datenzugriff durch die Erstellung eines Cursors basierend auf einem URI, der von der ContentProvider-Anwendung verfügbar gemacht wird.

  • CursorAdapter – Verwenden CursorAdapter oder SimpleCursorAdapter anzeigen von Daten, auf die über ein ContentProvider.

Über die ContentProvider-API können Consumer eine Vielzahl von Vorgängen mit den Daten ausführen, wie z. B. die folgenden:

  • Abfragen von Daten für die Rückgabe von Listen oder einzelnen Datensätzen
  • Ändern von einzelnen Datensätzen
  • Hinzufügen von neuen Datensätzen
  • Löschen von Datensätzen

Dieses Dokument enthält ein Beispiel, das einen systemseitig bereitgestellten ContentProvider verwendet, sowie ein einfaches, schreibgeschütztes Beispiel, das einen benutzerdefinierten ContentProvider implementiert.