android.provider.ContactsContract.Contacts
對應contacts數據表。RawContacts的一個聚合(aggregate)代表同一個人。每個人在數據表contacts中有一個記錄。
Operations
- Insert
Contact不能直接/顯式創建。插入一個RawContact時,provider首先查找是否存在一個Contact表示同一個人。如果存在,provider將Contacts._ID賦值給RawContacts.CONTACT_ID。如果不存在,provider插入一個新的Contact記錄,並且將Contacts._ID賦值給RawContacts.CONTACT_ID。
- Update
在Contact中,只有部分字段可以修改:TIMES_CONTACTED, LAST_TIME_CONTACTED, STARRED, CUSTOM_RINGTONE, SEND_TO_VOICEMAIL。修改其中任一字段會修改contact的所有成員(RawContact)。
- Delete
刪除Contact需謹慎。刪除聚合contact會刪掉它的所有成員(RawContacts)。SyncAdapter將通知刪除相關的RawContacts。
- Query
讀取某個特定的contact(我的理解是:已知ContactId),建議使用CONTENT_LOOKUP_URI。
根據電話號碼查找contact,建議使用優化過的PhoneLookup.CONTENT_FILTER_URI。
根據部分名字查找contact,建議使用CONTENT_FILTER_URI。
根據類似email地址、昵稱等數據查找contact,建議查找ContactsContract.Data表。結果含有ContactId、姓名等。
Columns
Contacts
譯文說明:在本文中將constituent raw contacts翻譯為“成員RawContact”。
| 數據類型 |
字段名 |
是否只讀 |
備注 |
| long |
_ID |
只讀 |
Row ID. 建議使用LOOKUP_KEY |
| String |
LOOKUP_KEY |
只讀 |
用於查找contact。在聚合或同步操作中RowId可能發生變化。 |
| long |
NAME_RAW_CONTACT_ID |
只讀 |
The ID of the raw contact that contributes the display name to the aggregate contact. During aggregation one of the constituent raw contacts is chosen using a heuristic: a longer name or a name with more diacritic marks or more upper case characters is chosen. |
| String |
DISPLAY_NAME_PRIMARY |
只讀 |
Contact的display-name。屬性值來源:RawContactId等於NAME_RAW_CONTACT_ID的RawContact的display-name。 |
| long |
PHOTO_ID |
只讀 |
外鍵,引用ContactsContract.Data表中擁有photo數據的那條記錄。記錄的Mime-Type是CommonDataKinds.Photo.CONTENT_ITEM_TYPE。聚合值是Mime-Type等於CommonDataKinds.Photo.IS_SUPER_PRIMARY那個值。 |
| int |
IN_VISIBLE_GROUP |
只讀 |
contact是否在UI上可見。1 - 至少一個RawContact可見。0 - 其他。 |
| int |
HAS_PHONE_NUMBER |
只讀 |
contact是否至少有一個電話號碼。1 - 至少有一個電話號碼。0 - 其他。 |
| int |
TIMES_CONTACTED |
可讀,可寫 |
Contact的聯系次數。賦值操作自動改變所有成員RawContact的屬性。聚合操作時,自動計算:取所有成員RawContact中最大的聯系次數。 |
| long |
LAST_TIME_CONTACED |
可讀,可寫 |
Contact的最近聯系時間。賦值時TIMES_CONTACTED自增。賦值操作自動改變所有成員RawContact的屬性。聚合操作時,自動計算:取所有成員RawContact中最近的聯系時間。 |
| int |
STARRED |
可讀,可寫 |
Contact是否favorite。1 - favorite。0 - 其他。聚合操作時,自動計算:任一成員RawContact是favorite,那么這個屬性就賦值1。賦值操作自動改變所有成員RawContact的屬性。 |
| String |
CUSTOM_RINGTONE |
可讀,可寫 |
給Contact設定的鈴聲。通常情況是從activity中返回的URI,且activity由android.media.RingtoneManager.ACTION_RINGTONE_PICKER啟動。 |
| int |
SEND_TO_VOICEMAIL |
可讀,可寫 |
來自Contact的呼叫是否應該直接轉發到voiceMail。1 - 是。0 - 否。聚合操作時,自動計算:所有成員RawContact的值是1,那么這個屬性賦值1。賦值操作自動改變所有成員RawContact的屬性。 |
| int |
CONTACT_PRESENCE |
只讀 |
Contact IM呈現出來的狀態(我理解為:離線、在線、離開、忙碌等)。聚合值為所有成員RawContact的highest presence。provider可能沒有選擇將這個屬性值持久存儲。期望是presence狀態會有規律性的更新。 |
| String |
CONTACT_STATUS |
只讀 |
Contact的最近的狀態。聚合值取所有成員RawContac中最近的值。 |
| long |
CONTACT_STATUS_TIMESTAMP |
只讀 |
產生(插入或更新)最近狀態的時間。 |
| String |
CONTACT_STATUS_RES_PACKAGE |
只讀 |
包括當前狀態label和icon的包。 |
| long |
CONTACT_STATUS_LABEL |
只讀 |
The resource ID of the label describing the source of contact status, e.g. "Google Talk". This resource is scoped by the CONTACT_STATUS_RES_PACKAGE. |
| long |
CONTACT_STATUS_ICON |
只讀 |
The resource ID of the icon for the source of contact status. This resource is scoped by the CONTACT_STATUS_RES_PACKAGE. |
