共用方式為


內容提供者的運作方式

互動涉及兩個 ContentProvider 類別:

  • ContentProvider – 實作 API,以標準方式公開一組數據。 主要方法是查詢、插入、更新和刪除。

  • ContentResolver – 與 通訊 ContentProvider 的靜態 Proxy,可從相同應用程式內或從另一個應用程式存取其數據。

內容提供者通常由 SQLite 資料庫支援,但 API 表示取用程式代碼不需要知道基礎 SQL 的任何專案。 查詢是透過 URI 使用常數來參考資料行名稱(以減少基礎數據結構的相依性),並 ICursor 傳回供取用的程式代碼逐一查看。

使用 ContentProvider

ContentProviders透過在發行數據的應用程式AndroidManifest.xml註冊的 URI 公開其功能。 有一個慣例,其中所公開的 URI 和數據行應該以常數的形式提供,以便輕鬆地系結至數據。 Android 的內 ContentProviders 建全都提供方便類別,其中包含參考命名空間中 Android.Providers 數據結構的常數。

內建提供者

Android 使用 提供對各種系統和使用者資料的 ContentProviders存取:

  • Browser – 書籤和瀏覽器歷程記錄(需要許可權 READ_HISTORY_BOOKMARKS 和/或 WRITE_HISTORY_BOOKMARKS)。

  • CallLog – 最近透過裝置進行或接收的呼叫。

  • 連絡人 – 使用者聯繫人清單中的詳細資訊,包括人員、手機、相片和群組。

  • MediaStore – 使用者裝置的內容:音訊(專輯、藝術家、內容類型、播放清單)、影像(包括縮圖)和視訊。

  • 設定 – 全系統的裝置設定和喜好設定。

  • UserDictionary – 用於預測性文字輸入的使用者定義字典內容。

  • 語音信箱 – 語音信箱訊息的歷程記錄。

類別概觀

使用 ContentProvider 時所使用的主要類別如下所示:

Class diagram of Content Provider application and Consuming application interactions

在此圖表中,會 ContentProvider 實作查詢並註冊 URI,讓其他應用程式用來尋找數據。 ContentResolver做為 [查詢]、[插入]、[更新] 和 [刪除] 方法的 ContentProvider 「Proxy」。 SQLiteOpenHelper包含 所使用的ContentProvider數據,但不會直接公開至取用應用程式。 會 CursorAdapter 傳遞 所傳 ContentResolver 回的數據指標,以顯示在 中 ListViewUriMatcher是處理查詢時剖析 URI 的協助程式類別。

每個類別的用途如下所述:

  • ContentProvider – 實作這個抽象類的方法以公開數據。 API 可透過新增至類別定義的 Uri 屬性,提供給其他類別和應用程式使用。

  • SQLiteOpenHelper – 協助實作 由 公開的 ContentProviderSQLite 資料存放區。

  • UriMatcherUriMatcher 在您的 ContentProvider 實作中使用 來協助管理用來查詢內容的 URI。

  • ContentResolver – 取用程式代碼會使用 ContentResolver 來存取 ContentProvider 實例。 這兩個類別會共同處理進程間通訊問題,讓數據在應用程式之間輕鬆共用。 取用程式代碼絕不會 ContentProvider 明確建立類別;相反地,會根據應用程式所公開 ContentProvider 的 Uri 建立數據指標來存取數據。

  • CursorAdapter – 使用 CursorAdapterSimpleCursorAdapter 顯示透過 ContentProvider存取的數據。

ContentProvider API 可讓取用者對資料執行各種作業,例如:

  • 查詢數據以傳回清單或個別記錄。
  • 修改個別記錄。
  • 新增記錄。
  • 刪除記錄。

本檔包含使用系統提供的 ContentProvider範例,以及實作自定義 ContentProvider的簡單只讀範例。