一.前言

1.1 Android的电话本的机制.

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

1.2 权限

        
  1. <uses-permissionandroid:name="android.permission.WRITE_CONTACTS"></uses-permission>
  2. <uses-permissionandroid: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

Type Alias Data column
String ADDRESS DATA1 Email address itself.
int TYPE DATA2 Allowed values are:

  • TYPE_CUSTOM. Put the actual type in LABEL.
  • TYPE_HOME
  • TYPE_WORK
  • TYPE_OTHER
  • TYPE_MOBILE

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

2.2.2 IM 对应 ContactsContract.CommonDataKinds.Im

Type Alias Data column
String DATA DATA1
int TYPE DATA2 Allowed values are:

  • TYPE_CUSTOM. Put the actual type in LABEL.
  • TYPE_HOME
  • TYPE_WORK
  • TYPE_OTHER

String LABEL DATA3
String PROTOCOL DATA5

Allowed 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

String CUSTOM_PROTOCOL DATA6

Im有5个字段

2.2.3 Phone 对应 ContactsContract.CommonDataKinds.Phone

Type Alias Data column
String NUMBER DATA1
int TYPE DATA2 Allowed values are:

  • TYPE_CUSTOM. Put the actual type in LABEL.
  • 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

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

Type Alias Data column
String FORMATTED_ADDRESS DATA1
int TYPE DATA2 Allowed values are:

  • TYPE_CUSTOM. Put the actual type in LABEL.
  • 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

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

更多相关文章

  1. Android(安卓)高仿微信实时聊天 基于百度云推送
  2. Android(安卓)7.0 FileProvider简单使用以及冲突处理
  3. android监听系统联系人修改
  4. Android小例子:让一个APP去启动另外一个APP
  5. Android整合网上资源以及个人对GreenDao数据库框架的理解与使用(
  6. android 数据库升级(保留原先数据)
  7. android 视频缩略图之 MediaStore
  8. Android(安卓)风格
  9. Android获取arrays.xml里的数组字段值实例详解

随机推荐

  1. android 使用开源库zxing生成二维码,扫描
  2. Android 全局异常处理
  3. android ViewParent requestDisallowInte
  4. android 事件的获取
  5. android选择时间攻略
  6. Android Studio 之 启动和停止服务
  7. Android 四大组件之 Activity
  8. Android 以太网调用流程
  9. Android intent跳转工具类
  10. Android handler使用说明