Welcome 微信登录

首页 / 操作系统 / Linux / Android 2.0中电话本contact的全操作(增删改查)

一.前言     1.1 Android的电话本是sdk通过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)。这个文件的路径为/data/data/com.android.providers.contacts/databases/contacts2.db。如图:


     1.4 在模拟器中的电话本里创建几个联系人,打开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:
  • 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
StringNUMBERDATA1 
intTYPEDATA2Allowed 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
StringLABELDATA3

2.2.4 Postal address 通讯地址 对应 ContactsContract.CommonDataKinds.StructuredPostal
TypeAliasData column
StringFORMATTED_ADDRESSDATA1 
intTYPEDATA2Allowed values are:
  • TYPE_CUSTOM. Put the actual type in LABEL.
  • TYPE_HOME
  • TYPE_WORK
  • TYPE_OTHER
StringLABELDATA3 
StringSTREETDATA4 
StringPOBOXDATA5Post Office Box number
StringNEIGHBORHOODDATA6 
StringCITYDATA7 
StringREGIONDATA8 
StringPOSTCODEDATA9 
StringCOUNTRYDATA10

最长用的有 TYPE:类型;STREET:街道;CITY:市;REGION:省;POSTCODE:邮政编码;
三.代码     3.1在api里 ContactsContract.Data 和ContactsContract.RawContacts文档里有关于insert ,update, delete,query的代码,显示出操作各自的表的代码。可以根据这些来完成我们自己的逻辑。     3.2 查询 (查出全部联系人,在只显示姓名)需要如图:
   需求分析:由于列表中只需要姓名,所以在查询表时就只查询出姓名信息就好。当点击某个联系人再查出Email,phone等详细信息。   3.2.1 查询联系人总表代码:说明:由于姓名可以直接在ContactsContract.Contacts表里查到,所以如下