Android暴露了許多Content Provider來訪問本地的資料庫。
你可以使用之前描述的技巧來使用本地的Content Provider。可變通的地方,android.provider類包含了一些便利的類來簡化這些有用的Provider,包括:
❑ Browser
使用Browser Content Provider可以用來讀取或修改標籤、瀏覽曆史或者網路搜尋。
❑ CallLog
查看或更新電話曆史,包括來電和去電、未接來電和電話細節,如連絡人和通話時間。
❑ Contacts
使用Contacts Provider可以用來讀取、修改或保持連絡人資訊。
❑ MediaStore
MediaStore提供了對裝置上的多媒體檔案的集中控制,包括音頻、視頻和圖片。你可以在MediaStore中儲存你自己的多媒體來讓它可以全域訪問。
❑ Settings
你可以使用Settings Provider來訪問裝置的Preference。使用它,你可以查看和修改藍芽設定、鈴聲和其它裝置設定。
你應該儘可能地使用這些本地的Content Provider,來保證你的程式和本地或第三方程式之前無瑕疵的整合到一起。
介紹如何使用這些輔助類不在本章的範圍,接下來的章節描述了如何使用其中的一些有用的、強大的本地Content Provider。
使用MediaStore Provider
Android的MediaStore提供了音頻、視頻和圖片檔案的管理倉庫。當你添加一個新的多媒體檔案到Android的檔案系統時,你應該把它也添加到MediaStore中,來保證它能被其它的程式可見。
MediaStore類中包含了一些方便地方法來簡化檔案的插入。例如。接下來的程式碼片段顯示了如何直接將一個檔案插入到MediaStore中:
android.provider.MediaStore.Images.Media.insertImage(getContentResolver(),
sourceBitmap,“my_cat_pic”,“Photo of my cat!”);
使用Contacts Provider
在通訊裝置上,對連絡人管理器的訪問是尤其重要的。Android在這點上,作出了正確的事情:對於授予了READ_CONTACTS許可權的任何應用程式,都可以訪問連絡人資料庫中的所有資訊。
在接下來的例子,Activity擷取連絡人資料庫中每個人的Cursor,建立一個字串數組來儲存每個連絡人的名字和電話號碼。
為了簡化從Cursor上提取資料,Android提供了一些People類的靜態屬性來表示列名稱。
// Get a cursor over every contact.
Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
// Let the activity manage the cursor lifecycle.
startManagingCursor(cursor);
// Use the convenience properties to get the index of the columns
int nameIdx = cursor.getColumnIndexOrThrow(People.NAME);
int phoneIdx = cursor. getColumnIndexOrThrow(People.NUMBER);
String[] result = new String[cursor.getCount()];
if (cursor.moveToFirst())
do {
// Extract the name.
String name = cursor.getString(nameIdx);
// Extract the phone number.
String phone = cursor.getString(phoneIdx);
result[cursor.getPosition()] = name + “ (“ + phone + “)”;
} while(cursor.moveToNext());
為了運行這個程式碼片段,你需要給程式添加READ_CONTACTS許可權。
和查詢連絡人資料庫一樣,你還可以使用這個Content Provider來修改、刪除或插入連絡人記錄。