互動涉及兩個 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 時所使用的主要類別如下所示:
在此圖表中,會 ContentProvider 實作查詢並註冊 URI,讓其他應用程式用來尋找數據。 ContentResolver做為 [查詢]、[插入]、[更新] 和 [刪除] 方法的 ContentProvider 「Proxy」。 SQLiteOpenHelper包含 所使用的ContentProvider數據,但不會直接公開至取用應用程式。
會 CursorAdapter 傳遞 所傳 ContentResolver 回的數據指標,以顯示在 中 ListView。 UriMatcher是處理查詢時剖析 URI 的協助程式類別。
每個類別的用途如下所述:
ContentProvider – 實作這個抽象類的方法以公開數據。 API 可透過新增至類別定義的 Uri 屬性,提供給其他類別和應用程式使用。
SQLiteOpenHelper – 協助實作 由 公開的
ContentProviderSQLite 資料存放區。UriMatcher –
UriMatcher在您的ContentProvider實作中使用 來協助管理用來查詢內容的 URI。ContentResolver – 取用程式代碼會使用
ContentResolver來存取ContentProvider實例。 這兩個類別會共同處理進程間通訊問題,讓數據在應用程式之間輕鬆共用。 取用程式代碼絕不會ContentProvider明確建立類別;相反地,會根據應用程式所公開ContentProvider的 Uri 建立數據指標來存取數據。CursorAdapter – 使用
CursorAdapter或SimpleCursorAdapter顯示透過ContentProvider存取的數據。
ContentProvider API 可讓取用者對資料執行各種作業,例如:
- 查詢數據以傳回清單或個別記錄。
- 修改個別記錄。
- 新增記錄。
- 刪除記錄。
本檔包含使用系統提供的 ContentProvider範例,以及實作自定義 ContentProvider的簡單只讀範例。
