1.首先,要知道android 的contacts里的电话信息有多类:moblie,家庭,工作,传真等。如图:

2.android的Contacts是通过ContentProvider来提供的,其实android把contacts和SMS给组织成数据库文件了,你可以在File Explorer 的/data/data/com.android.provider.contacts下找到contacts.db,这就是电话本数据库文件,你手机里的contacts信息都在这个数据库的各张表里。

3.知道contacts信息是在一个数据库里就要知道这张数据库里的都有什么表,这些表的字段都有什么。我们可以把这个contacts.db文件提取出来,再用SQLite Expert Professional 2这个软件打开,就可以看到数据库的信息了。如图:

4.可以看出和API说的一样,people和phones都是一张表,注意下phones这张表,这里就有我们要的所有电话号码信息。也可以看到以下两点:

4.1:phones表中的person字段对应为people表中的_id;

4.2:  phones表中的type字段就是API中Contacts.PhonesColumns的TYPE字段,这个就是电话的7个分类,TYPE=2为moblie

5.这样就可以用代码来提取出来数据了,要注意一点,在用query()查找时的Uri直接指向phones表就OK。

Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,null, null, Contacts.People.DEFAULT_SORT_ORDER);

6.下面是一个完整的方法代码:

/* 读取手机中的contacts内容 */private void getContactsInfoListFromPhone() {/* 取得ContentResolver */ContentResolver content = this.getContentResolver();/* 取得通讯录的Phones表的cursor */Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,null, null, Contacts.People.DEFAULT_SORT_ORDER);/* 在LogCat里打印所有关于的列名 */for (int i = 0; i < contactcursor.getColumnCount(); i++) {String columnName = contactcursor.getColumnName(i);Log.d("readTXT", "column name:" + columnName);}/* 逐条读取记录信息 */int Num = contactcursor.getCount();Log.v("readTXT", "recNum=" + Num);String name, number;for (int i = 0; i < Num; i++) {contactcursor.moveToPosition(i);String type = contactcursor.getString(contactcursor.getColumnIndexOrThrow(Contacts.Phones.TYPE));Log.v("readTXT", "type=" + type);String person_id = contactcursor.getString(contactcursor.getColumnIndexOrThrow(Contacts.Phones.PERSON_ID));Log.v("readTXT", "person_id=" + person_id);name = contactcursor.getString(contactcursor.getColumnIndexOrThrow(Contacts.Phones.NAME));number = contactcursor.getString(contactcursor.getColumnIndexOrThrow(Contacts.Phones.NUMBER));// number = number == null ? "无输入电话" : number;// 当找不到电话时显示"无输入电话"nameContactsInPhone.add(name);Log.v("readTXT", "name=" + name);numberContactsInPhone.add(number);Log.v("readTXT", "*****number=" + number);}}

7.从上面的代码可以总结一点经验,在不知道数据库表的字段时,可以用下面的方法来打印出来,就可以清楚后,再应用了:

/* 取得通讯录的Phones表的cursor */Cursor contactcursor = content.query(Contacts.Phones.CONTENT_URI, null,null, null, Contacts.People.DEFAULT_SORT_ORDER);/* 在LogCat里打印所有关于的列名 */for (int i = 0; i < contactcursor.getColumnCount(); i++) {String columnName = contactcursor.getColumnName(i);Log.d("readTXT", "column name:" + columnName);}

Android中读取电话本Contacts联系人的所有电话号信息相关推荐

  1. 如何从电话本添加联系人

    How to add contacts from phonebook 如何从电话本添加联系人 Note:API is deprecated in S60 3.2 so while using this ...

  2. Android中读取短信信息

    Android中读取的短信文件有 /*** 所有的短信*/public static final String SMS_URI_ALL = "content://sms/";/** ...

  3. 5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。...

    5G时代,跟IMSI-CATCHER SAY GOODBYE from:https://unicorn.360.com/blog/2018/04/18/GoodBye_5G_IMSI-Catcher/ ...

  4. Android发送短信(短信发送以及群发和从电话本选择联系人)---短信管家2

    分析下怎么写 首先,我们需要一个输入框,可以手动的输入手机号码, 其次,很少有人愿意手动输入,那么我们需要提供一个按钮来给我们的用户选择自己电话本中的联系人(一次可以选择多个即群发) 然后,我们需要一 ...

  5. Android中读取NFC标签卡中的ID

    场景 APP中读取NFC卡中的标签ID,作为用户的唯一标识进行登录验证. 首先需要确保手机支持NFC功能.其次具备一张NFC卡片. 读取id就是利用的读卡器模式,当把卡片靠近手机的NFC天线的时候,N ...

  6. java 获取 邮箱联系人_在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱...

    /** 读取联系人的信息*/ public voidtestReadAllContacts() { Cursor cursor= this.getContext().getContentResolve ...

  7. Android代码数字证书,有关Android中读取证书

    最近在项目中遇到了读取证书中内容与读取keystore中对应公钥的需求,在此做一下笔记 读取证书 最近项目中遇到后台返回个byte[]数组类型的证书,需要从证书中获取相关内容,先看一下相关代码 Buf ...

  8. android 读json文件,在Android中读取json文件

    小编典典 将该文件放入资产中 . 对于在Android Studio项目中创建的项目,您需要在主文件夹下创建资产文件夹. 将该文件读取为: public String loadJSONFromAsse ...

  9. android中读取svg文件,Android如何加载SVG格式的矢量图

    为何要加载SVG图片 相对于.JPG和.PNG甚至.webp的图片来说,SVG的图片有两个优点,第一:省空间,APK瘦身有一个方面就是从图片瘦身,使用SVG图片可以大量减轻程序的大小.第二:省时间,切 ...

最新文章

  1. 计算机组成原理 第五章【中央处理器】课后作业解析【MOOC答案】
  2. java包命名规则名词_java中命名规范
  3. VMware虚拟机12安装linux系统
  4. 理解 Azure AD 安全默认值设置
  5. Densely CNN
  6. Node.js: 如何继承 events 自定义事件及触发函数
  7. mysql系统服务初始化_MySql服务初始化、安装、启动
  8. nemesis什么车_马力2100匹《Trion Nemesis》谜样超跑诞生中?
  9. 集成学习—Adaboost(理解与应用)
  10. android ios9 rom,安卓党也能用上IOS9了 奇兔刷机首发24款机型仿IOS9 ROM
  11. ICML2021会议论文整理
  12. VS2019 编译 odb-mysql2.4详细过程
  13. 2022年起重机械指挥考试题库及模拟考试
  14. 早上还在改 Bug,晚上就被裁了
  15. win7如何调整计算机c盘,win7系统让c盘和d盘合并的两种方法
  16. 2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围?
  17. 暴雨,她还会再回来的,广东已开通本月降雨套餐
  18. 谷歌高清卫星地图转西安80坐标系
  19. 【C语言】PAT乙级:1007 素数对猜想
  20. 如何防止SQLserver服务器被黑?

热门文章

  1. 如何永久删除WPS中word文件中的样式
  2. python如何给字加颜色_python之如何输出带颜色的文字
  3. 除opencv以外的一些图像处理库(包含链接)
  4. new Date() 格式化日期注意事项
  5. vue返回上一页并传值回上一个页面(uni版本)
  6. 爬虫的两大重要文件:robots.txt和sitemap.xml
  7. 张小龙对微信思考最深刻的地方
  8. centos6 实现网站搭建
  9. Windows JDK1.8绿色版安装
  10. java整形变量转换字符串_JAVA整型转换字符串以及相互转换的相关实例