• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Android开发系列十一对手机通讯录的读取、添加、删除、查找

武飞扬头像
autumn
帮助1

一、通讯录介绍通讯录是Android手机自带的一个应用,它是一个ContentProvider应用,其它应用可以对通讯录进行访问,进行对联系人的CRUD操作。二、通讯录数据库结构的介绍

首先,我们可以在File Explorer视图下找到contacts2.db文件,这是通讯录的文件

然后,我们用SQLite打开,分析下它的数据库结构:

raw_contacts表:

data表:

mimetypes表:

这三张表的结构介绍完了,接下来我们说下它们之间的联系:

<喎�"http://www.2cto.com/kf/ware/vc/" target="_blank" >vcD4KPHA cmF3X2NvbnRhY3Rzse205rfFwarPtcjLtcS8x8K8SUSjutfWts7D 7PGysdfaWQ8L3A CjxwPmRhdGGx7bTmt8XBqs 1yMu1xNDFz6Kjul9pZMrH1ve8/KOscmF3X2NvbnRhY3RzX2lkttTTpnJhd19jb250YWN0c7HttcRfaWSjrG1pbWV0eXBlX2lk19a2zrbU06a1xMrHbWltZXR5cGVzse21xF9pZDwvcD4KPHA bWltZXR5cGVzse205rfFZGF0YbHttcTDv8z1vMfCvLXEyvTQ1KO6X2lkysfW97z8o6zOqjG1xMqxuvLKx2VtYWlswODQzTwvcD4KPHA PGJyPgo8L3A CjxoMT7I/aGiz9TKvqGizO2806Giyb6z/aGisunV0sGqz7XIy6O6PC9oMT4KPGgyPjGhorvxyKHL dPQtcTBqs 1yMujujwvaDI CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">public void testContacts() throws Exception{ Uri uri = Uri.parse("content://com.android.contacts/contacts"); //获得一个ContentResolver数据共享的对象 ContentResolver reslover = getContext().getContentResolver(); //取得联系人中开始的游标,通过content://com.android.contacts/contacts这个路径获得 Cursor cursor = reslover.query(uri, null, null, null, null); //上边的所有代码可以由这句话代替:Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //Uri.parse("content://com.android.contacts/contacts") == ContactsContract.Contacts.CONTENT_URI while(cursor.moveToNext()){ //获得联系人ID String id = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID)); //获得联系人姓名 String name = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME)); //获得联系人手机号码 Cursor phone = reslover.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID   "="   id, null, null); StringBuilder sb = new StringBuilder("contactid=").append(id).append(name); while(phone.moveToNext()){ //取得电话号码(可能存在多个号码) int phoneFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); String phoneNumber =

2、查找联系人:

//根据号码获取联系人的姓名          


                      public            void            testContactNameByNumber()            throws            Exception{          


                      String number =            "110"           ;          


                      Uri uri = Uri.parse(           "content://com.android.contacts/data/phones/filter/"            number);          


                      ContentResolver resolver = getContext().getContentResolver();          


                      Cursor cursor = resolver.query(uri,            new            String[]{android.provider.ContactsContract.Data.DISPLAY_NAME},            null           ,            null           ,            null           );             


                      if           (cursor.moveToFirst()){          


                      String name = cursor.getString(           0           );          


                      Log.i(TAG, name);          


                      }          


                      cursor.close();          


                      }

3、添加联系人:

//添加联系人          


                      public            void            testAddContact()            throws            Exception{          


                      Uri uri = Uri.parse(           "content://com.android.contacts/raw_contacts"           );          


                      ContentResolver resolver = getContext().getContentResolver();          


                      ContentValues values =            new            ContentValues();          


                      long            contactid = ContentUris.parseId(resolver.insert(uri, values));          


                      


                      uri = Uri.parse(           "content://com.android.contacts/data"           );          


                      


                      //添加姓名          


                      values.put(           "raw_contact_id"           , contactid);          


                      values.put(Data.MIMETYPE,            "vnd.android.cursor.item/name"           );          


                      values.put(           "data1"           ,            "xiaoming"           );          


                      resolver.insert(uri, values);          


                      values.clear();          


                      


                      //添加电话          


                      values.put(           "raw_contact_id"           , contactid);          


                      values.put(Data.MIMETYPE,            "vnd.android.cursor.item/phone_v2"           );          


                      values.put(           "data1"           ,            "1234120155"           );          


                      resolver.insert(uri, values);          


                      values.clear();          


                      


                      //添加Email          


                      values.put(           "raw_contact_id"           , contactid);          


                      values.put(Data.MIMETYPE,            "vnd.android.cursor.item/email_v2"           );          


                      values.put(           "data1"           ,            "1234120155@qq.com"           );          


                      resolver.insert(uri, values);          


                      }

4、批量添加联系人(因为如果按照姓名、电话、Email的方式添加的话,其中一个环节出错,联系人也可以添加上去。但是批量的话就是一下子(指时间短暂或动作迅速)(指时间短暂或动作迅速)添加所有的)

//批量添加          


                      public            void            testAddContact2()            throws            Exception{          


                      Uri uri = Uri.parse(           "content://com.android.contacts/raw_contacts"           );          


                      ContentResolver resolver = getContext().getContentResolver();          


                      ArrayList<contentprovideroperation> operations =            new            ArrayList<contentprovideroperation>();          


                      ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)          


                      .withValue(           "account_name"           ,            null           )          


                      .build();          


                      operations.add(op1);          


                      


                      uri = Uri.parse(           "content://com.android.contacts/data"           );          


                      //添加姓名          


                      ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)          


                      .withValueBackReference(           "raw_contact_id"           ,            0           )          


                      .withValue(           "mimetype"           ,            "vnd.android.cursor.item/name"           )          


                      .withValue(           "data2"           ,            "李小龙"           )          


                      .build();          


                      operations.add(op2);          


                      //添加电话号码          


                      ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)          


                      .withValueBackReference(           "raw_contact_id"           ,            0           )          


                      .withValue(           "mimetype"           ,            "vnd.android.cursor.item/phone_v2"           )          


                      .withValue(           "data1"           ,            "1234120155"           )          


                      .withValue(           "data2"           ,            "2"           )          


                      .build();          


                      operations.add(op3);          


                      


                      resolver.applyBatch(           "com.android.contacts"           , operations);          


                      }</contentprovideroperation></contentprovideroperation>

5、删除联系人:

public            void            testDelete()           throws            Exception{            


                      String name =            "李小龙"           ;            


                      //根据姓名求id            


                      Uri uri = Uri.parse(           "content://com.android.contacts/raw_contacts"           );            


                      ContentResolver resolver =            this           .getContext().getContentResolver();            


                      Cursor cursor = resolver.query(uri,            new            String[]{Data._ID},           "display_name=?"           ,            new            String[]{name},            null           );            


                      if           (cursor.moveToFirst()){            


                      int            id = cursor.getInt(           0           );            


                      //根据id删除data中的相应数据            


                      resolver.delete(uri,            "display_name=?"           ,            new            String[]{name});            


                      uri = Uri.parse(           "content://com.android.contacts/data"           );            


                      resolver.delete(uri,            "raw_contact_id=?"           ,            new            String[]{id            ""           });            


                      }            


                      }

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibeaba
系列文章
更多 icon
同类精品
更多 icon
继续加载