一.前言
1.1 Android的电话本的机制.
Android的电话本通过contentProvider封装好的。我们只要通过sdk提供的Uri和字段来对其进行增、删、改、查。
1.2 权限
1.3 找到ContentProvider维护的Sqlist数据库文件( .db)
ContentProvider其实自己管理一个Sqlist数据库文件( .db)。这个文件的路径为/data/data/viders.contacts/databases/contacts2.db。如图:
1.4 查看ContentProvider维护的Sqlist数据库文件( .db)
在模拟器中的电话本里创建几个联系人,打开1.2中的.db文件,可以用数据库查看工具SQLite Expert Professional打开看下,如图:
从上图,可以看出左边是.db文件的表,点开各表后可以看出主要的表有raw_contacts,contacts,data
二. api
2.1 三张主表.
从api中可以看到vider.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:
TYPE_CUSTOM. Put the actual type in LABEL.
TYPE_HOME
TYPE_WORK
TYPE_OTHER
TYPE_MOBILE
StringLABELDATA3
Email数据有三个字段存储:ADDRESS为Email值;TYPE为类型,当为自定义(TYPE_CUSTOM)时,LABEL字段要写入用户自定义的类型;
2.2.2 IM 对应 ContactsContract.CommonDataKinds.Im
TypeAliasData column
StringDATADATA1
intTYPEDATA2Allowed values are:
TYPE_CUSTOM. Put the actual type in LABEL.
TYPE_HOME
TYPE_WORK
TYPE_OTHER
StringLABELDATA3
StringPROTOCOLDATA5Allowed values:
PROTOCOL_CUSTOM. Also provide the actual protocol name as CUSTOM_PROTOCOL.
PROTOCOL_AIM
PROTOCOL_MSN
PROTOCOL_YAHOO
PROTOCOL_SKYPE
PROTOCOL_QQ
PROTOCOL_GOOGLE_TALK
PROTOCOL_ICQ
PROTOCOL_JABBER
PROTOCOL_NETMEETING
StringCUSTOM_PROTOCOLDATA6
Im有5个字段
2.2.3 Phone 对应 ContactsContract.CommonDataKinds.Phone
TypeAliasData column