今天看了一下 android手機內的通訊錄數據庫,簡單的匯總了一下。
數據庫見附件中的contacts2.db , 里面一共有40個表,34個視圖,很龐大,挑幾個重點的看一下。
1.表Raw_contacts
假定設備上有2個賬戶:
這兩個賬戶里面都有 聯系人“GG”,導出的數據如下
注意頭兩列,第一列將會和下面的表關聯,第二列關聯Account
第一個 [酷派客服熱線]是手機自帶的。
中間兩條是同步下來的。
最后一個是從手機上添加的。
這個表的作用 就是存儲原生數據以及同步的配置項。
2.Data 表
詳細的數據存放在data中,用主鍵關聯raw_Data。
注意 raw_contact_id 是用來關聯上一個表的, mimeType_id 是指不同的數據類型,data1-data15是用來存儲數據的
| _id |
package_id |
mimetype_id |
raw_contact_id |
is_read_only |
is_primary |
is_super_primary |
data_version |
data1 |
data2 |
data3 |
data4 |
data5 |
data6 |
data7 |
data8 |
data9 |
data10 |
data11 |
data12 |
data13 |
data14 |
data15 |
data_sync1 |
| 23 |
7 |
5 |
0 |
0 |
0 |
0 |
https://www.google.com/m8/feeds/photos/media/neroseagate3%40gmail.com/1a6e03a18abfdb19 |
||||||||||||||||
| 24 |
6 |
5 |
0 |
0 |
0 |
1 |
GG |
GG |
1 |
3 |
|||||||||||||
| 25 |
11 |
5 |
0 |
0 |
0 |
1 |
|||||||||||||||||
| 26 |
10 |
5 |
0 |
0 |
0 |
1 |
|||||||||||||||||
| 27 |
15 |
5 |
0 |
0 |
0 |
1 |
4 |
5 |
|||||||||||||||
| 29 |
8 |
5 |
0 |
0 |
0 |
1 |
5 |
||||||||||||||||
| 30 |
5 |
5 |
0 |
0 |
0 |
1 |
13372576188 |
2 |
8.6134E+12 |
||||||||||||||
| 31 |
16 |
5 |
0 |
0 |
0 |
1 |
3 |
||||||||||||||||
| 32 |
17 |
5 |
0 |
0 |
0 |
0 |
1972/12/18 |
3 |
|||||||||||||||
| 33 |
2 |
5 |
0 |
1 |
0 |
1 |
1 |
||||||||||||||||
| 34 |
8 |
5 |
0 |
0 |
0 |
0 |
6 |
||||||||||||||||
| 35 |
4 |
5 |
0 |
0 |
0 |
0 |
江西,中囿 |
1 |
江西_ |
中國 |
MimeType 的值如下:
| _id |
mimetype |
| 1 |
vnd.android.cursor.item/cpother |
| 2 |
vnd.android.cursor.item/email_v2 |
| 3 |
vnd.android.cursor.item/im |
| 4 |
vnd.android.cursor.item/postal-address_v2 |
| 5 |
vnd.android.cursor.item/phone_v2 |
| 6 |
vnd.android.cursor.item/name |
| 7 |
vnd.android.cursor.item/photo |
| 8 |
vnd.android.cursor.item/group_membership |
| 9 |
vnd.android.cursor.item/organization |
| 10 |
vnd.android.cursor.item/nickname |
| 11 |
vnd.android.cursor.item/note |
| 12 |
vnd.android.cursor.item/sns |
| 13 |
vnd.android.cursor.item/sip_address |
| 14 |
vnd.android.cursor.item/identity |
| 15 |
vnd.com.google.cursor.item/contact_misc |
| 16 |
vnd.android.cursor.item/website |
| 17 |
vnd.android.cursor.item/contact_event |
另外data1-data15 有不同的用途
名字:
Uri: Uri.parse("content://com.android.contacts/data")
PREFIX = "data4"; //名稱前綴
MID_NAME = "data5";//中間名
GIVEN_NAME = "data2";//名字
FAMILY_NAME = "data3";//姓氏
MID_PINYIN="data8"; //中間名拼音
String FAMILY_NAME_PINYIN="data9"; //姓氏拼音
String SUFIX = "data6"; //名稱后綴
String SUFIX_PINYIN="data7"; //名字拼音
電話:
Uri: Uri.parse("content://com.android.contacts/data/phones"
phone: "data1";//號碼
Type: "data2";//這個字段是整形值,指示電話類型
類型對應關系如下:
TYPE_CUSTOM = 0;
TYPE_HOME = 1;
TYPE_MOBILE = 2;
TYPE_WORK = 3;
TYPE_FAX_WORK = 4;
TYPE_FAX_HOME = 5;
TYPE_PAGER = 6;
TYPE_OTHER = 7;
Email:
Uri:Uri.parse("content://com.android.contacts/data/emails")
Email: "data1";//郵箱地址
Type: "data2";//這個字段是整形值,指示Email類型
類型對應關系如下:
TYPE_CUSTOM = 0;
TYPE_HOME = 1;
TYPE_WORK = 2;
TYPE_OTHER = 3;
TYPE_MOBILE = 4;
地址:
Uri:Uri.parse("content://com.android.contacts/data/postals")
STREET="data4";//街道
CITY="data8";//城市
STATE="data7";//州
ZIP_CODE="data9";//郵政編碼
Type:"data2";//type的類型如下
TYPE_CUSTOM = 0;
TYPE_HOME = 1;
TYPE_WORK = 2;
TYPE_OTHER = 3;
3.表Contacts
這張表,按照google的意思,合並raw_contacts里面的同名聯系人,如下圖所示,
可是,我看到的並不是這樣子, 對比第一個表,貌似沒有合並,只是一個簡單的匯總信息表。
| _id |
name_raw_contact_id |
default_tel |
single_is_secret |
photo_index |
send_to_voicemail_vt |
send_to_voicemail_sip |
indicate_phone_or_sim_contact |
index_in_sim |
filter |
is_sdn_contact |
| 1 |
1 |
76923075280 |
0 |
5 |
0 |
0 |
-1 |
-1 |
0 |
0 |
| 3 |
5 |
13372576188 |
0 |
4 |
0 |
0 |
-1 |
-1 |
0 |
0 |
| 6 |
6 |
15906879563 |
0 |
7 |
0 |
0 |
-1 |
-1 |
0 |
0 |
| 7 |
7 |
133 |
0 |
6 |
0 |
0 |
-1 |
-1 |
0 |
0 |
參考資料
http://developer.android.com/guide/topics/providers/contacts-provider.html
http://blog.csdn.net/xys289187120/article/details/6730957
http://www.cnblogs.com/lw900320/archive/2013/01/10/2855145.html
附件( http://files.cnblogs.com/xiaokang088/db.zip)是 從手機里面提取出來的數據庫和 轉化的excel。






