最近在做乙個專案,裡面涉及到系統通訊錄的問題,就做了一天多的嘗試,也檢視了一些網上的文章,做了簡單的總結。android的通訊錄資料庫存放在/data/data/com.android.contact.provider/contacts2.db中。這裡面的幾張表是有關係的:data,contacts,groups,mimetypes,raw_contacts.這五張表中的資料是相互關聯的,所以在查詢一些資料的時候,需要將表進行聯絡,但是android中對於系統的資料庫,在查詢的時候是不允許進行關聯查詢(除去系統提供的查詢方式),這時候只能進行一張表一張表的操作。
上圖便是資料庫中的部分表。
data表:記錄了使用者的通訊錄所有資料,包括手機號,顯示名稱等,但是裡面的mimetype_id表示不同的資料型別。這與表mimetypes表中的_id相對應。raw_contact_id與下面的raw_contacts表中的_id相對應
mimetypes表:
在mimetype表中,我們注意_id = 5和11,稍後會使用
groups表,此表記錄的是通訊錄中的分組,其中account_name標識了這個分組屬於那個使用者。因為使用的同事的小公尺,所以其中乙個賬戶是xiaomi。如果用其他手機,裡面應該會是com.google的分組。在字段中有乙個group_visible標識了當前組是否可見(0表示可見,1表示隱藏):
raw_contacts表中,有乙個欄位是contact_id,接下來會與下面的contacts表中的_id相關聯。
contacts表,這個表中的name_raw_contact_id就與上面的raw_contacts表中的_id相對應。
上面是對5張表的簡單概括,那麼接下來將是如何去獲取使用者的手機號和名稱。
如果自己觀察data表和raw_contacts表,會發現,通訊錄中顯示的手機號存放在data表中,而對應的使用者顯示名稱卻是在raw_contacts中,所以當我們要去獲取手機號對應的使用者顯示名稱的時候,我們還需要去檢視raw_contacts表中的值,這個中間對應的橋梁就是data表中raw_contact_id;
操作Android 手機通訊錄資料庫
設定名字資訊 values.put contactscontract.data.raw contact id,rawcontactid values.put data.mimetype,structuredname.content item type value contact.getprefix ...
contacts(通訊錄)資料庫
android通訊錄 有關通訊錄的資料都放在contacts2.db中這個資料庫放在 data data com.android.providers.contacts databases contacts.db 聯絡歷史表calls 欄位名稱 說明 id 索引key,自增長 number 通話 號碼...
Android讀取通訊錄資料
第一步,配置許可權 如果需要儲存,還需要儲存許可權 第二步,編寫聯絡人獲取工具類contractsutil public class contractsutil 根據uri查詢相應的contentprovider,cursor為獲取到的資料集 cursor cursor context.getcon...