1. 程式人生 > >Android中聯絡人和通話記錄詳解(2)

Android中聯絡人和通話記錄詳解(2)

  在文章Android中聯絡人和通話記錄詳解(1)中對通話記錄進行了分析,本章將對聯絡人的資料庫表、欄位以及Insert,Query,Delelte,Update四大基本資料操作進行分析。

  與聯絡人相關的主要的表總共有四個:contacts,data,mimetypes,raw_contacts。

contacts表的欄位和外來鍵關係:

  在這個表中,簡單的儲存了聯絡人的一些資訊,最主要的外來鍵關係是欄位name_raw_contact_id對應著表raw_contacts表中的欄位_id。

data表的欄位和外來鍵關係:

  data表中儲存著聯絡人的詳細資料,最主要的外來鍵關係是欄位raw_contact_id對應著表raw_contacts的欄位_id,欄位mimetype_id對應著表mimetype的欄位_id,通過這些外來鍵關係,可以找到每一個聯絡人的多種類別(郵件、電話,姓名等等)對應的資料。表中的data1欄位主要儲存具體的資料(電話號碼,郵件地址,姓名等等);data2主要儲存型別;當是圖片的時候,data15欄位儲存著圖片的二進位制資料,所以可以直接讀取圖片。


mimetypes表的欄位和欄位值:

  這張表中的欄位表示與聯絡人相關的資料分類,也是data表中儲存的資料的分類,它們分別是:

vnd.android.cursor.item/email_v2:郵件,vnd.android.cursor.item/im:即時訊息,vnd.android.cursor.item/nickname:暱稱,vnd.android.cursor.item/organization:組織機構,vnd.android.cursor.item/phone_v2:電話,

vnd.android.cursor.item/sip_address:sip地址,vnd.android.cursor.item/name:名字,vnd.android.cursor.item/postal-address_v2:郵政地址,vnd.android.cursor.item/identity:身份,vnd.android.cursor.item/photo:照片,

vnd.android.cursor.item/group_membership:群組成員關係。

  每一個類別都是一對多的資料關係,比如vnd.android.cursor.item/name(名字)有 display_name,given_name,family_name等等。

raw_contacts表的欄位和外來鍵關係:


  這個表示聯絡人儲存資料的核心表,每一個聯絡人都對應著表中的一條資料。其中欄位version(版本),每個聯絡人的資料修改一次,version就會變化一次(加1),所以可以判斷version是否改變來監聽聯絡人資料的變化;欄位delete(刪除),預設為0,如果是1表示這行資料已經刪除。這個表中的_id欄位是關鍵,通過它可以在data表中查詢聯絡人的電話、姓名、郵箱等資訊。

  上面相關聯絡人的表關係已經基本清楚,下面分析聯絡人的名字,郵件,電話等等這種一對多的資料是怎樣儲存的。在表mimetypes中,提供了11中聯絡人儲存的資料類別,通過分析,在類com.provider.ContactsContract.CommonDataKinds中查詢到了每一個類別擁有的欄位。

下面為每一個類別的具體欄位的分析:

郵箱(Emial mimetype=vnd.android.cursor.item/email_v2)


即時訊息(IM mimetype=vnd.android.cursor.item/im)

暱稱(Nickname mimetyp=vnd.android.cursor.item/nickname)

電話號碼(Phone mimetype=vnd.android.cursor.item/phone_v2)

名字(StructuredName mimetype=vnd.android.cursor.item/name)

  在這裡就只簡單分析上面幾個類別,還有郵政(StrcturedPostal mimetype=vnd.android.cursor.item/postal-address_v2),組織(Organization mimetype=vnd.android.cursor.item/organization)等等類別,也可以在com.provider.ContactsContract.CommonDataKinds類中找到。

  到目前為止,聯絡人的資料是怎樣用表儲存的以及用哪些欄位儲存的,已經基本明白。那麼,下一章將對聯絡人的資料操作(Insert,Query,Update,Delete)進行分析。