一.前言

1.1 Android的电话本的机制.

Android的电话本通过contentProvider封装好的。我们只要通过sdk提供的Uri和字段来对其进行增、删、改、查。

1.2 权限

 
  
  1. <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission> 
  2.    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission> 

1.3 找到ContentProvider维护的Sqlist数据库文件( .db)

ContentProvider其实自己管理一个Sqlist数据库文件( .db)。这个文件的路径为/data/data/com.android.providers.contacts/databases/contacts2.db。如图:


 


 

1.4 查看ContentProvider维护的Sqlist数据库文件( .db)

在模拟器中的电话本里创建几个联系人,打开1.2中的.db文件,可以用数据库查看工具SQLite Expert Professional打开看下,如图:

从上图,可以看出左边是.db文件的表,点开各表后可以看出主要的表有raw_contacts,contacts,data


 

二. api
 

2.1 三张主表.

从api中可以看到android.provider.ContactsContract是sdk2.0的类库,从api和上面的图都可以看出关于电话本主要信息都存在 ContactsContract.Data ContactsContract.RawContacts ContactsContract.Contacts 三张表里

2.1.1 以上三张表的关联关系.

ContactsContract.Data, ContactsContract.RawContacts, ContactsContract.Contacts 三张表的关联,

ContactsContract.RawContacts表里包含ContactsContract.Contacts的contact_id;ContactsContract.Data表里有ContactsContract.RawContacts的raw_contact_id,和ContactsContract.Contacts的contact_id

 

2.2 各数据对应的类库,电话本各字段的数据结构

2.2.1 Email 对应ContactsContract.CommonDataKinds.Email

 

TypeAliasData column
StringADDRESSDATA1Email address itself.
intTYPEDATA2Allowed values are:

 

 

StringLABELDATA3 
Email数据有三个字段存储:ADDRESS为Email值;TYPE为类型,当为自定义(TYPE_CUSTOM)时,LABEL字段要写入用户自定义的类型;

 

2.2.2 IM 对应 ContactsContract.CommonDataKinds.Im

 

TypeAliasData column
StringDATADATA1 
intTYPEDATA2Allowed values are:

 

 

StringLABELDATA3 
StringPROTOCOLDATA5

Allowed values:

 

StringCUSTOM_PROTOCOLDATA6

Im有5个字段

 

2.2.3 Phone 对应 ContactsContract.CommonDataKinds.Phone

 

TypeAliasData column
StringNUMBERDATA1 
intTYPEDATA2Allowed values are:

 

 

StringLABELDATA3

2.2.4 Postal address 通讯地址 对应 ContactsContract.CommonDataKinds.StructuredPostal

 

 

TypeAliasData column
StringFORMATTED_ADDRESSDATA1 
intTYPEDATA2Allowed values are:

 

 

StringLABELDATA3 
StringSTREETDATA4 
StringPOBOXDATA5Post Office Box number
StringNEIGHBORHOODDATA6 
StringCITYDATA7 
StringREGIONDATA8 
StringPOSTCODEDATA9 
StringCOUNTRYDATA10

最长用的有 TYPE:类型;STREET:街道;CITY:市;REGION:省;POSTCODE:邮政编码;