Android 手机中的联系人信息保存在  data\data\com.android.providers.contacts\databases\contacts2.db 中。主要有

raw_contacts 表:用来存放联系人的 id;

data 表:用来存放联系人的具体数据;

mimetypes 表:保存数据类型。

  1. public class ContactInfoProvider {
  2.  
  3. private Context context;
  4.  
  5. public ContactInfoProvider(Context context) {
  6. this.context = context;
  7. }
  8.  
  9. /**
  10. * 返回所有的联系人的信息
  11. *
  12. * @return
  13. */
  14. public List<ContactInfo> getContactInfos() {
  15.  
  16. // 将所有联系人存入该集合
  17. List<ContactInfo> infos = new ArrayList<ContactInfo>();
  18. // 获取 raw_contacts 表所对应的 Uri
  19. Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
  20. // 获取 data 表所对应的 Uri
  21. Uri datauri = Uri.parse("content://com.android.contacts/data");
  22. // 参数二:所要查询的列,即联系人的id。获取一个查询数据库所返回的结果集
  23. Cursor cursor = context.getContentResolver().query(uri, new String[] { "contact_id" }, null, null, null);
  24. // 移动游标
  25. while (cursor.moveToNext()) {
  26. // 因为我们只需要查询一列数据-联系人的id,所以我们传入0
  27. String id = cursor.getString(0);
  28. // 用于封装每个联系人的具体信息
  29. ContactInfo info = new ContactInfo();
  30. // 得到 id 后,我们通过该 id 来查询 data 表中的联系人的具体数据(data表中的data1中的数据)。
  31. // 参数二:null,会将所有的列返回回来
  32. // 参数三:选择条件 返回一个在data表中查询后的结果集
  33. Cursor dataCursor = context.getContentResolver().query(datauri, null, "raw_contact_id=?", new String[] { id }, null);
  34. while (dataCursor.moveToNext()) {
  35. //dataCursor.getString(dataCursor.getColumnIndex("mimetype"))获取data1列中具体数据的数据类型,这里判断的是联系人的姓名
  36. if ("vnd.android.cursor.item/name".equals(dataCursor.getString(dataCursor.getColumnIndex("mimetype")))) {
  37. //dataCursor.getString(dataCursor.getColumnIndex("data1"))获取data1列中的联系人的具体数据
  38. info.setName(dataCursor.getString(dataCursor.getColumnIndex("data1")));
  39. } else if ("vnd.android.cursor.item/phone_v2".equals(dataCursor.getString(dataCursor.getColumnIndex("mimetype")))) {//数据类型是否是手机号码
  40. info.setPhone(dataCursor.getString(dataCursor.getColumnIndex("data1")));
  41. }
  42. }
  43. // 每查询一个联系人后就将其添加到集合中
  44. infos.add(info);
  45. info = null;
  46. // 关闭结果集
  47. dataCursor.close();
  48. }
  49. cursor.close();
  50. return infos;
  51. }
  52. }

Android 开发工具类 37_ ContactInfoProvider的更多相关文章

  1. Android开发工具类

    7种无须编程的DIY开发工具 你知道几个? 现如今,各种DIY开发工具不断的出现,使得企业和个人在短短几分钟内就能完成应用的创建和发布,大大节省了在时间和资金上的投入.此外,DIY工 具的出现,也帮助 ...

  2. android开发工具类之获得WIFI IP地址或者手机网络IP

    有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...

  3. android开发工具类总结(一)

    一.日志工具类 Log.java public class L { private L() { /* 不可被实例化 */ throw new UnsupportedOperationException ...

  4. Android 开发工具类 35_PatchUtils

    增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...

  5. Android 开发工具类 13_ SaxService

    网络 xml 解析方式 package com.example.dashu_saxxml; import java.io.IOException; import java.io.InputStream ...

  6. Android 开发工具类 06_NetUtils

    跟网络相关的工具类: 1.判断网络是否连接: 2.判断是否是 wifi 连接: 3.打开网络设置界面: import android.app.Activity; import android.cont ...

  7. Android 开发工具类 03_HttpUtils

    Http 请求的工具类: 1.异步的 Get 请求: 2.异步的 Post 请求: 3.Get 请求,获得返回数据: 4.向指定 URL 发送 POST方法的请求. import java.io.Bu ...

  8. Android 开发工具类 19_NetworkStateReceiver

    检测网络状态改变类: 1.注册网络状态广播: 2.检查网络状态: 3.注销网络状态广播: 4.获取当前网络状态,true为网络连接成功,否则网络连接失败: 5.注册网络连接观察者: 6.注销网络连接观 ...

  9. Android 开发工具类 27_多线程下载大文件

    多线程下载大文件时序图 FileDownloader.java package com.wangjialin.internet.service.downloader; import java.io.F ...

随机推荐

  1. JVM、JRE,JDK

    JVM解释class     Java虚拟机,解释编译后的class文件给系统..java代码编译成 .class机器指令,就能在JVM运行了,直接到硬件执行,实现了跨平台,只要操作系统安装了JVM, ...

  2. Foundation-NSOperation-NSInvocationOperation/NSBlockOperation/NSOperationQueue

    iOS多线程编程技术之NSThread.Cocoa NSOperation.GCD 线程之间的通信 iOS开发系列--并行开发其实很容易 GCD由浅入深学习 iOS多线程NSOperation/Que ...

  3. 服务器重启报错:提示fstab readonly报错!( /etc/fstab 只读无法修改的解决办法)

    摘自:http://blog.csdn.net/gray13/article/details/7432866 一.问题描述:服务器重启报错:提示fstab readonly报错! 二.问题原因:挂载的 ...

  4. day04_雷神_函数

    #day04 1.函数 1.1函数传参 函数定义的时候是形参:函数执行的时候是实参 实参: 位置参数.关键字参数.混合参数 位置参数:位置一一对应 关键字参数: 可以位置不对应 混合参数:关键字参数要 ...

  5. Java学习--基本数据类型的定义和运算2

    例1 public class OperateDemo01{ public static void main(String args[]){ int num = 22 ; System.out.pri ...

  6. cxGrid 怎样才能让不自动换行 WordWrap:=false

    cxGrid 怎样才能让不自动换行 WordWrap:=false 2014-12-26 02:04:03|  分类: delphi|举报|字号 订阅     下载LOFTER我的照片书  |     ...

  7. 用fastreport在进行多列打印时,默认是先行后列,如何改成先列后行排记录?

    例子程序中的6.fr3是在Page中设置 columns=2这样就是先行后列,7.fr3就是3列先列后行的例子 1     6 2     7 3     8 4     9 5     10 但如果 ...

  8. vue项目webpack中Npm传递参数配置不同域名接口

    项目开发中,前端在配置后端api域名时很困扰,常常出现:本地开发环境: api-dev.demo.com测试环境: api-test.demo.com线上生产环境: api.demo.com, 这次是 ...

  9. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址

    在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址. (一)主要的步骤: 在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取 ...

  10. node.js fs,http

    error: EventEmitter定义了一个特殊的时间error,它包含了‘错误’的语义,当error被发射时,EventEmitter规定如果没有 响应的监听器,Node.js会把它当做异常,退 ...