一.前言
1.1 Android的电话本的机制.
Android的电话本通过contentProvider封装好的。我们只要通过sdk提供的Uri和字段来对其进行增、删、改、查。
1.2 权限
- <uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
- <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
Email数据有三个字段存储:ADDRESS为Email值;TYPE为类型,当为自定义(TYPE_CUSTOM)时,LABEL字段要写入用户自定义的类型;
Type Alias Data column String ADDRESS
DATA1
Email address itself. int TYPE
DATA2
Allowed values are:
TYPE_CUSTOM
. Put the actual type inLABEL
.TYPE_HOME
TYPE_WORK
TYPE_OTHER
TYPE_MOBILE
String LABEL
DATA3
2.2.2 IM 对应 ContactsContract.CommonDataKinds.Im
Im有5个字段
Type Alias Data column String DATA
DATA1
int TYPE
DATA2
Allowed values are:
TYPE_CUSTOM
. Put the actual type inLABEL
.TYPE_HOME
TYPE_WORK
TYPE_OTHER
String LABEL
DATA3
String PROTOCOL
DATA5
Allowed values:
PROTOCOL_CUSTOM
. Also provide the actual protocol name asCUSTOM_PROTOCOL
.PROTOCOL_AIM
PROTOCOL_MSN
PROTOCOL_YAHOO
PROTOCOL_SKYPE
PROTOCOL_QQ
PROTOCOL_GOOGLE_TALK
PROTOCOL_ICQ
PROTOCOL_JABBER
PROTOCOL_NETMEETING
String CUSTOM_PROTOCOL
DATA6
2.2.3 Phone 对应 ContactsContract.CommonDataKinds.Phone
2.2.4 Postal address 通讯地址 对应 ContactsContract.CommonDataKinds.StructuredPostal
Type Alias Data column String NUMBER
DATA1
int TYPE
DATA2
Allowed values are:
TYPE_CUSTOM
. Put the actual type inLABEL
.TYPE_HOME
TYPE_MOBILE
TYPE_WORK
TYPE_FAX_WORK
TYPE_FAX_HOME
TYPE_PAGER
TYPE_OTHER
TYPE_CALLBACK
TYPE_CAR
TYPE_COMPANY_MAIN
TYPE_ISDN
TYPE_MAIN
TYPE_OTHER_FAX
TYPE_RADIO
TYPE_TELEX
TYPE_TTY_TDD
TYPE_WORK_MOBILE
TYPE_WORK_PAGER
TYPE_ASSISTANT
TYPE_MMS
String LABEL
DATA3
最长用的有 TYPE:类型;STREET:街道;CITY:市;REGION:省;POSTCODE:邮政编码;
Type Alias Data column String FORMATTED_ADDRESS
DATA1
int TYPE
DATA2
Allowed values are:
TYPE_CUSTOM
. Put the actual type inLABEL
.TYPE_HOME
TYPE_WORK
TYPE_OTHER
String LABEL
DATA3
String STREET
DATA4
String POBOX
DATA5
Post Office Box number String NEIGHBORHOOD
DATA6
String CITY
DATA7
String REGION
DATA8
String POSTCODE
DATA9
String COUNTRY
DATA10