您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Android入门之增删改查通讯录
Android入门之增删改查通讯录一、通讯录应用介绍通讯录应用是Android自带的应用程序,我们看到此应用的时候,可能只认为这是一个应用,用数据库存储数据,但是实际上不是这样的。通讯录是ContentProvider的应用,通讯录由两部分组成:(1)com.android.providers.contacts的ContentProvider:真正存储数据的ContentProvider(2)com.android.contacts:运用ContentResolver获取数据的图形用户界面;二、获取ContactProvider的源代码Android源代码:用git获取;如果要获取ContactProvider,则安装git,并打开gitbash,输入gitclone即可;目录结构如下:为何要获取ContactProvider的源代码呢?因为如果要访问ContentProvider,必须要了解URI的设置(authority,path等);只有查看源代码才能够知道;AndroidManifest.xml为清单文件,列出了ContactProvider的authorities,以及要访问通讯录需要的权限;[html]viewplaincopyprint?1.uses-permissionandroid:name=android.permission.READ_CONTACTS/2.uses-permissionandroid:name=android.permission.WRITE_CONTACTS/主要的通讯录程序为ContactsProvider2.java,authorities为:contacts或com.android.contacts;三、通讯录数据库结构介绍表结构如下:通讯录是存放在/data/data/com.android.providers.contacts/databases/contacts2.db,里面主要的表有:(1)raw_contacts:存放联系人的ID,_id属性为主键,声明为autoincrement,即不需要手动设置,其他属性也不需要手动设置就有默认值;display_name属性为姓名;(2)mimetypes:存放数据的类型,比如vnd.android.cursor.item/name表示“姓名”类型的数据,vnd.android.cursor.item/phone_v2表示“电话”类型的数据;(3)data:存放具体的数据;raw_contact_id属性用来连接raw_contacts表,每条记录表示一个具体数据;我们主要的数据(email、phone等)都存放在data表;【成都android培训】data1属性存放总数据;data2属性:-如果此记录存放姓名,则data2存放名;-如果此记录存放电话,则data2存放类型,比如手机、家电;-如果此记录存放组织,则data2存放类型,比如公司、其他;-如果此记录存放地址,则data2存放类型,比如住宅,单位等;四、对通信录做增删改查简单的说:对通讯录操作就是对一个普通的ContentProvider操作;1.Query(1)根据电话号码查询姓名[java]viewplaincopyprint?1.//根据电话号码查询姓名(在一个电话打过来时,如果此电话在通讯录中,则显示姓名)2.publicvoidtestReadNameByPhone(){3.Stringphone=12345678;4.//uri=content://com.android.contacts/data/phones/filter/#5.Uriuri=Uri.parse(content://com.android.contacts/data/phones/filter/+phone);6.ContentResolverresolver=this.getContext().getContentResolver();7.Cursorcursor=resolver.query(uri,newString[]{Data.DISPLAY_NAME},null,null,null);//从raw_contact表中返回display_name8.if(cursor.moveToFirst()){9.Log.i(Contacts,name=+cursor.getString(0));10.}11.}(2)查询所有的联系人[java]viewplaincopyprint?1.//读取通讯录的全部的联系人2.//需要先在raw_contact表中遍历id,并根据id到data表中获取数据3.publicvoidtestReadAll(){4.//uri=content://com.android.contacts/contacts5.Uriuri=Uri.parse(content://com.android.contacts/contacts);//访问raw_contacts表6.ContentResolverresolver=this.getContext().getContentResolver();7.Cursorcursor=resolver.query(uri,newString[]{Data._ID},null,null,null);//获得_id属性8.while(cursor.moveToNext()){9.StringBuilderbuf=newStringBuilder();10.intid=cursor.getInt(0);//获得id并且在data中寻找数据11.buf.append(id=+id);12.uri=Uri.parse(content://com.android.contacts/contacts/+id+/data);//如果要获得data表中某个id对应的数据,则URI为content://com.android.contacts/contacts/#/data13.Cursorcursor2=resolver.query(uri,newString[]{Data.DATA1,Data.MIMETYPE},null,null,null);//data1存储各个记录的总数据,mimetype存放记录的类型,如电话、email等14.while(cursor2.moveToNext()){15.Stringdata=cursor2.getString(cursor2.getColumnIndex(data1));16.if(cursor2.getString(cursor2.getColumnIndex(mimetype)).equals(vnd.android.cursor.item/name)){//如果是名字17.buf.append(,name=+data);18.}19.elseif(cursor2.getString(cursor2.getColumnIndex(mimetype)).equals(vnd.android.cursor.item/phone_v2)){//如果是电话20.buf.append(,phone=+data);21.}22.elseif(cursor2.getString(cursor2.getColumnIndex(mimetype)).equals(vnd.android.cursor.item/email_v2)){//如果是email23.buf.append(,email=+data);24.}25.elseif(cursor2.getString(cursor2.getColumnIndex(mimetype)).equals(vnd.android.cursor.item/postal-address_v2)){//如果是地址26.buf.append(,address=+data);27.}28.elseif(cursor2.getString(cursor2.getColumnIndex(mimetype)).equals(vnd.android.cursor.item/organization)){//如果是组织29.buf.append(,organization=+data);30.}31.}32.Stringstr=buf.toString();33.Log.i(Contacts,str);34.}35.}2.Insert(1)一步一步添加数据[java]viewplaincopyprint?1.//一步一步添加数据2.publicvoidtestAddContacts(){3.//插入raw_contacts表,并获取_id属性4.Uriuri=Uri.parse(content://com.android.contacts/raw_contacts);5.ContentResolverresolver=this.getContext().getContentResolver();6.ContentValuesvalues=newContentValues();7.longcontact_id=ContentUris.parseId(resolver.insert(uri,values));8.//插入data表9.uri=Uri.parse(content://com.android.contacts/data);10.//addName11.values.put(raw_contact_id,contact_id);12.values.put(Data.MIMETYPE,vnd.android.cursor.item/name);13.values.put(data2,zdong);14.values.put(data1,xzdong);15.resolver.insert(uri,values);16.values.clear();17.//addPhone18.values.put(raw_contact_id,contact_id);19.values.put(Data.MIMETYPE,vnd.android.cursor.item/phone_v2);20.values.put(data2,2);//手机21.values.put(data1,87654321);22.resolver.insert(uri,values);23.values.clear();24.//addemail25.values.put(raw_contact_id,contact_id);26.values.put(Data.MIMETYPE,vnd.android.cursor.item/email_v2);27.values.put(data2,2);//单位28.values.put(data1,xzdong@xzdong.com);29.resolver.insert(uri,values);30.}(2)批量添加数据核心代码:(1)ContentProviderOperationoperation=ContentProviderOperation.newInsert(uri).withValue(key,value).build();(2)resolver.applyBatch(authorities,operations);//批量提交[java]viewplaincopyprint?1.spanstyle=font-size:18px;publicvoidtestAddContactsInTr
三七文档所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
本文标题:Android入门之增删改查通讯录
链接地址:https://www.777doc.com/doc-3378288 .html