#Android中获取手机中的联系人信息
1.0、查看系统通讯录的表,表路径:data—>data—>com.android.providers.contacts—>databases—>contacts2.db
1.1、其中重要的表有:

  1. raw_contacts表(可查看上次通话记录、可获取联系人的id(“contact_id”));
  2. data表(保存了联系人的号码与名字,可获取联系人的rid(“raw_contact_id”)(id==rid),可获取信息种类的id(“mimetype_id”));
  3. mimetype表(保存了信息种类名称,id=5(vnd.android.cursor.item/phone_v2)电话号码)
  4. 视图表:view_data表()可查看多表间的数据关系

2.0、流程:

  1. 首先,从raw_contacts中读取联系人的id(“contact_id”)
  2. 其次, 根据contact_id从data表中查询出相应的电话号码和联系人名称
  3. 然后,根据mimetype来区分哪个是联系人,哪个是电话号码
  4. 最后将数据填充到ListView中

3.0、布局:

  1. activity_main.xml:
<ListViewandroid:id="@+id/lv_list"android:layout_width="match_parent"android:layout_height="match_parent" />

2、contact_list_item.xml:

 <TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp" /><TextViewandroid:id="@+id/tv_phone"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp" />

3.1、代码:

public class MainActivity extends Activity {private ListView lvList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lvList = (ListView) findViewById(R.id.lv_list);ArrayList<HashMap<String, String>> readContact = readContact();// System.out.println(readContact);lvList.setAdapter(new SimpleAdapter(this, readContact,R.layout.contact_list_item, new String[] { "name", "phone" },new int[] { R.id.tv_name, R.id.tv_phone }));}/***得到联系人**/private ArrayList<HashMap<String, String>> readContact() {// 首先,从raw_contacts中读取联系人的id("contact_id")// 其次, 根据contact_id从data表中查询出相应的电话号码和联系人名称// 然后,根据mimetype来区分哪个是联系人,哪个是电话号码Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts");Uri dataUri = Uri.parse("content://com.android.contacts/data");ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();// 从raw_contacts中读取所有联系人的id("contact_id")Cursor rawContactsCursor = getContentResolver().query(rawContactsUri,new String[] { "contact_id" }, null, null, null);if (rawContactsCursor != null) {while (rawContactsCursor.moveToNext()) {String contactId = rawContactsCursor.getString(0);// System.out.println("得到的contact_id="+contactId);// 根据contact_id从data表中查询出相应的电话号码和联系人名称, 实际上查询的是视图view_dataCursor dataCursor = getContentResolver().query(dataUri,new String[] { "data1", "mimetype" }, "contact_id=?",new String[] { contactId }, null);if (dataCursor != null) {HashMap<String, String> map = new HashMap<String, String>();while (dataCursor.moveToNext()) {String data1 = dataCursor.getString(0);String mimetype = dataCursor.getString(1);// System.out.println(contactId + ";" + data1 + ";"// + mimetype);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);}}list.add(map);dataCursor.close();}}rawContactsCursor.close();}return list;}
}

3.2、添加权限:

 <uses-permission android:name="android.permission.READ_CONTACTS"/>

4.0、可调取系统的通讯录程序得到联系人数据

Android中获取手机中的联系人信息相关推荐

  1. Android中获取手机内所有应用信息

    有时候我们开发中需要获取到手机中安装的所有软件相关信息,比如判断是否安装了某个软件,或者获取某个软件的具体包名等.这里我贴出相关方法. 首先我们要有一个APP的实体类 public class App ...

  2. Android之获取手机基本信息、内存信息、网路信息、电池信息,等一共18项数据

    获取手机信息,代码复制可用,开发工具为:Android Studio 1.手机品牌 2.手机型号 3.屏幕分辨率 4.像素密度 5.屏幕尺寸 6.Android 系统版本 7.运行内存 8.储存空间 ...

  3. Android获取手机中外置内存卡、内置内存卡、手机内存路径

    http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...

  4. Android获取手机中外置内存卡 内置内存卡 手机内存路径

    http://www.open-open.com/code/view/1433585940578 首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己 ...

  5. android 获取图片上某一个文字位置_android 获取手机中的所有图片或某一目录下的图片方法...

    获取手机中的所有图片,并过滤获取某一目录下的图片.(注释掉的代码可以按照目录分组) private void getAllPhotoInfo() { new Thread(new Runnable() ...

  6. android中获取应用程序(包)的信息,Android中获取应用程序(包)的信息PackageManager的使用(一).doc...

    Android中获取应用程序(包)的信息PackageManager的使用(一) 本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等 ...

  7. android qq apk,仿QQ获取手机中的APK并分享的实现

    前几天看到同事里有一个界面绚丽的应用,觉得有点意思,就让他把APK发给我,我想反编译看看里面的代码.结果,这哥们在手机里找了好一阵子,最后给我说:手机没有root,找不到APK文件在哪里.我再让他试试 ...

  8. Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册

    一.获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片: 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地 ...

  9. android 常用机型尺寸_Android中获取手机屏幕大小的方法

    本文为大家解析Android中如何获取手机屏幕大小,提供一个解决方法,分享给大家供大家参考,具体内容如下 运行效果图: 运行程序后,当我们点击Button按钮时,可以看到下面的效果图: 具体代码: 我 ...

最新文章

  1. 32岁程序员,补偿N+2:“谢谢裁我,让我翻倍!” 网友:榜样!
  2. Android入门教程 (二) 第一个App HelloWorld
  3. Android LruCache 压缩图片 有效避免程序OOM
  4. [RK3288][Android6.0] 调试笔记 --- 软硬键盘同时使用【转】
  5. 用 gson 替换 fastjson 引发的线上问题分析
  6. 皇室战争:暗夜女巫重做,去掉亡语机制后,她凉的可能会更快
  7. 黑客——技术的凝聚者???
  8. linux下mtr命令,如何使用Linux mtr命令
  9. TYVJ 1014 乘法游戏
  10. [Ext JS 4] 实战之Grid, Tree Gird 添加按钮列
  11. Silverlight、XAML实现滚动文字
  12. 目前 NORTON SEP 及各类产品 离线升级包下载及升级方法
  13. linux内存源码分析 - 内存压缩(实现流程)
  14. mycat mysql 主从_Mycat实现Mysql主从读写分离
  15. 力软框架java_力软敏捷框架 jfGrid 使用例子之一
  16. python调用按键精灵插件_按键精灵必须掌握的命令之插件命令
  17. 实战分析PHP大马隐藏后门——案例一
  18. 2.ActiveMQ下载和安装(Linux版)
  19. 爬虫代理哪家强?十大付费代理详细对比评测出炉!
  20. 计算机组装流程是什么,组装电脑的步骤

热门文章

  1. html js鼠标悬停事件,鼠标悬停在轴标签d3.js javascript上的事件
  2. 揭秘马化腾15项性格
  3. 好奇号火星科学实验室成功登陆火星
  4. 小程序搜索服务优化最佳实践
  5. 【马斯克为 AI 怼上扎克伯格】人工智能威胁人类文明,历史争论总结
  6. Cannot resolve symbol 'alibaba'
  7. pcmark2 android测试,PCMark安卓版升级:支持64位ARM架构 存储测试为Storage 2.0
  8. layer.load使用
  9. SAP S4HANA MM模块后台配置详解
  10. assertion failed: [predictions must be >= 0] [Condition x >= y did not hold element-wise:]