在开发应用程序过程中有时候会关联到用户的手机联系人,在Android的为开发者提供了ContentProvider内容提供者来获取手机的联系人,首先我在模拟器中保存了两个联系人如下所示:

lisi:电话:1201
zhangsan:电话:1110

通过Eclipse导出电话本的数据库使用SQLite EXpert打开得到数据库,可以看到里面有很多表格。

在这些表格中保存联系认的表格是raw_contact和data表格,分别打开这两个表格,可以看到,保存在手机里面的两个联系人

所以只需要在程序中查找这两张表就可以获得联系人的姓名了电话。

在程序中:

1、首先得到ContentProvider提供的内容提供器

2、获得需要查询的表的URI

// 1 得到一个内容解析器ContentResolver resolver = getContentResolver();// 2 获得要查询的表的uri// 只需要这两张表Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");Uri dataUri = Uri.parse("content://com.android.contacts/data

查询raw_contacts表格中联系人的contact_id

Cursor cursor = resolver.query(uri, new String[]{"contact_id"}, null, null, null);

然后再通过得到的contact_id查询data表格中的data1和mimetype的信息,

<span style="white-space:pre">          </span>while (cursor.moveToNext()) {String contact_id = cursor.getString(0);if (contact_id != null) {Cursor dataCursor = resolver.query(dataUri, new String[]{"data1","mimetype"}, "contact_id=?", new String[]{contact_id}, null);while(dataCursor.moveToNext()){String data1 = dataCursor.getString(0);String mimetype = dataCursor.getString(1);System.out.println("data1----" + data1 + "---mimetype---" + mimetype);

打印出得到的 data1和mimetype信息,

data1----1110---mimetype---vnd.android.cursor.item/phone_v2data1----Zhangsan---mimetype---vnd.android.cursor.item/namedata1----1 201---mimetype---vnd.android.cursor.item/phone_v2
data1----Lisi---mimetype---vnd.android.cursor.item/name

通过上面的信息可知。当mimetype为vnd.android.cursor.item/phone_v2时,data1的值就是电话号码。当mimetype为vnd.android.cursor.item/name时, data1的值就是联系人姓名。并存在map中。

<span style="white-space:pre">              </span>if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {map.put("phone", data1);}else if ("vnd.android.cursor.item/name".equals(mimetype)) {map.put("name", data1);}

最后将数据显示在Listview中

List<Map<String, String>> data = getSystemContact();SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_contact, new String[]{"name","phone"}, new int[]{R.id.name,R.id.phone});select_contact.setAdapter(adapter);

最后的结果如下图:

源代码下载:查询联系人

Android 使用ContentProvider(内容提供者)查询手机联系相关推荐

  1. android 53 ContentProvider内容提供者

    ContentProvider内容提供者:像是一个中间件一样,一个媒介一样,可以以标准的增删改差操作对手机的文件.数据库进行增删改差.通过ContentProvider查找sd卡的音频文件,可以提供标 ...

  2. Android ContentProvider 内容提供者

    ContentProvider 内容提供者,是Android四大组件之一. 一.简述 可以理解为一个特殊的存储数据的类型,它提供了一套标准的接口来获取和操作数据.可以把数据封装到ContentProv ...

  3. Android 开发之 ContentProvider 内容提供者

    今天主要学习了这些内容,使用ContentProvider共享数据.从互联网上获取数据,以及上传数据(文件)到互联网上面: ContentProvider(内容提供者) 当应用继承ContentPro ...

  4. Android组件系列----ContentProvider内容提供者 和 android:authorities

    authorities 是provider所在的包的名字+provider本身定义的名称 ---zgs [正文] 一.ContentProvider简介: ContentProvider内容提供者(四 ...

  5. Day10安卓 专高 day10 ContentProvider内容提供者

    Day10安卓 专高 day10 ContentProvider内容提供者 安卓 专高 day10 ContentProvider内容提供者 ContentProvider 的使用 内容提供者,就是给 ...

  6. 通过内容提供者获取手机上的音乐资源

    当我们要获取手机上的某一种资源的时候,如果直接遍历手机上的文件,这样既浪费大量时间也会占用手机大量的资源,这是一种得不偿失的做法.这篇文章在我吸取了大牛们的经验和实践来的. 今天跟大家讲讲如何通过内容 ...

  7. Android学习---通过内容提供者(ContentProvider)操作另外一个应用私有数据库的内容...

    一.什么是ContentProvider? ContentProvider直译过来就是内容提供者,主要作用就是A应用提供接口给B应用调用数据,和之前介绍的sharedPreference和直接开放文件 ...

  8. android 使用内容提供者获取手机联系人

    最近在学习安卓的相关内容, 正好在写获取手机联系人的程序, 就想到了内容提供者, 这里有几点需要注意, 写到这里, 以后方便自己查询. 1. 手机联系人的数据库是存储在 data/data/com.a ...

  9. Android存储数据---内容提供者ContentProvider

    简介 内容提供者的使用 2. 实例 (1)activity_main.xml <?xml version="1.0" encoding="utf-8"?& ...

最新文章

  1. Xamarin SQLite教程Xamarin.iOS项目添加引用
  2. Android Contact数据模型之EntityDelta(二)
  3. apache commons常用工具类
  4. Netty--Reactor模式
  5. leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)
  6. 使用Spring Roo进行快速云开发–第1部分:Google App Engine(GAE)
  7. tensorflow tf.train.batch()
  8. java获取对象的子_java – 如何根据子对象字段获取父对象
  9. tomcat classpath两个路径_solr安装-tomcat+solrCloud构建稳健solr集群
  10. 纯 CSS 解决自定义 CheckBox 背景颜色问题
  11. php 循环获取分类,PHP 循环删除无限分类子节点
  12. CLP 中关闭自动落实的问题
  13. 虚拟机器系统安装管理 Xencenter
  14. Creator H5全平台游戏开发教程 PDF 下载(800+页)
  15. 2.交互-对鼠标及键盘的使用
  16. 最好的java代码编辑器_推荐 5 款牛逼的代码编辑器
  17. 个人开发者只要一行代码接入微信支付和支付宝支付
  18. 自动化测试工程师应聘要求
  19. matlab图像导数求积分_matlab微积分问题:导数、偏导数
  20. 再探HEVC——理解不同类型的I帧

热门文章

  1. arduino使用oled代码_Arduino提高篇06—温湿度OLED显示
  2. TCP/IP / 网关和路由器的区别
  3. C/Cpp / 条件编译
  4. const int、const int *、int *cosnt、const int * const、const int 的区别
  5. 前天看了sigmastar新品发布,双核,1.2GHZ,真香!更多你想要了解的SSD201/202技术问题,看过来!启明云端MM帮你整理了!拿走不谢
  6. keil obj 文件 结构_OBJ文件格式详解
  7. 完整的OTT直播点播系统都有哪些功能?
  8. Selenium3+MySQL数据库进行数据驱动测试
  9. pycharm 安装与激活
  10. Pwn_9 作业讲解