博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-查询联系人和增加联系人
阅读量:5037 次
发布时间:2019-06-12

本文共 4904 字,大约阅读时间需要 16 分钟。

系统表data/com.android.providers.contacts/databases/contacts2.db存放着联系人的信息

表:

  a) 表raw_contacts

     重要字段:_id  display_name

  b) 表data 

   重要字段: minitype_id  raw_contact_id data1 data2 ....

  c) 表minitypes

   重要字段:mimetype

查看源码:

https://github.com/android

https://github.com/android/platform_packages_providers_contactsprovider

  platform_packages_providers_contactsprovider

一、查询联系人

  a) TestContacts.java

1 public class TestContacts extends AndroidTestCase { 2  3     public void getAllContactsInfo()throws Exception{ 4          5         String rawbase = "content://com.android.contacts/raw_contacts"; 6         String database = "content://com.android.contacts/data"; 7          8         Uri uri = Uri.parse(rawbase); 9         Cursor cursor = getContext().getContentResolver().query(uri, null, null, null, null);10         11         while(cursor.moveToNext()){12             13             String id = cursor.getString(cursor.getColumnIndex("_id"));//取得raw_contacts中的字段_id14             //System.out.println("_id = "+id);15             Cursor datacursor = getContext().getContentResolver().query(Uri.parse(database), null, "raw_contact_id=?", new String[]{id}, null);16             //查询表data中通过字段raw_contact_id = _id(raw_contacts中的)17             18             while(datacursor.moveToNext()){19                 20                 /*String[] names = datacursor.getColumnNames();21                 for (String str : names) {22                     System.out.println(str);23                 }*/24                 25                 String mimetype = datacursor.getString(datacursor.getColumnIndex("mimetype"));26                 //取得表mimetypes表中字段mimetype , 表data中通过data1和mimietype_id和表mimetypes的_id进行了多表查询27                 System.out.println("mimetype = "+mimetype);28                 if("vnd.android.cursor.item/name".equals(mimetype)){29                     String data1 =  datacursor.getString(datacursor.getColumnIndex("data1"));//取得data表中字段data130                     System.out.println("姓名: "+data1);31                 }else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){32                     String data1 =  datacursor.getString(datacursor.getColumnIndex("data1"));//取得data表中字段data133                     System.out.println("电话: "+data1);34                 }else if("vnd.android.cursor.item/postal-address_v2".equals(mimetype)){35                     String data1 =  datacursor.getString(datacursor.getColumnIndex("data1"));//取得data表中字段data136                     System.out.println("地址: "+data1);37                 }else if("vnd.android.cursor.item/email_v2".equals(mimetype)){38                     String data1 =  datacursor.getString(datacursor.getColumnIndex("data1"));//取得data表中字段data139                     System.out.println("邮箱: "+data1);40                 }41             }42             datacursor.close();43         }44         cursor.close();45     }46 }

  b)AndroidManifest.xml

1 
2
6 7
8 9
14 15
16
17 18
21
22 23 24

二、添加联系人

1 //    增加联系人 2     /* 3      * 应用: 4      *  qq 同步助手 5          号簿管家 -> 文件 -> 上传服务器  6          pim 90多字段  体力活  7      */ 8     public void writeContact() throws Exception{ 9         10         String rawbase = "content://com.android.contacts/raw_contacts";11         Uri url = Uri.parse(rawbase);12         ContentValues values = new ContentValues();13         Uri uri = getContext().getContentResolver().insert(url , values );14         //返回的raw_contact 表中的_id15         long id = ContentUris.parseId(uri);16         17         String database = "content://com.android.contacts/data";18         19         ContentValues nameValues = new ContentValues();20         nameValues.put("mimetype", "vnd.android.cursor.item/phone_v2");21         nameValues.put("data1", "hacket");22         nameValues.put("raw_contact_id", id);23         getContext().getContentResolver().insert(Uri.parse(database), nameValues);24         25         ContentValues phoneValues = new ContentValues();26          phoneValues.put("mimetype", "vnd.android.cursor.item/phone_v2");27          phoneValues.put("data1", "18974677184");28          phoneValues.put("raw_contact_id", id);29          getContext().getContentResolver().insert(Uri.parse(database), phoneValues);30          31          ContentValues emailValues = new ContentValues();32          emailValues.put("mimetype", "vnd.android.cursor.item/email_v2");33          emailValues.put("data1", "zeng_fansheng@sina.cn");34          emailValues.put("raw_contact_id", id);35          getContext().getContentResolver().insert(Uri.parse(database), emailValues);36 37     }

 

 需要增加

加入读写联系人信息的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
 

转载于:https://www.cnblogs.com/hacket/archive/2013/06/09/3128147.html

你可能感兴趣的文章
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
Python学习-文件操作
查看>>
正则表达式()、[]、{}的区别
查看>>
第十二周作业
查看>>
Socket开发框架之框架设计及分析
查看>>