在做项目的过程中,需要获取我们手机通讯录联系人的基本信息,如姓名、电话、邮箱、备注、昵称、公司、职位、家庭电话等等信息,下面就是我总结的一些具体方法。

1:首先读取联系人需要添加读取权限,6.0以上需要动态获取权限)

1.1AndroidManifest.xml 文件添加:

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

1.2 在我们需要获取联系人信息功能的地方添加:

//判断用户是否已经授权给我们了 如果没有,调用下面方法向用户申请授权,之后系统就会弹出一个权限申请的对话框
        if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_CONTACTS)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1);
        } else {
                  //在这里执行读取通讯录方法
        }

1.3:在class中添加权限回调方法
//回调方法,无论哪种结果,最终都会回调该方法,之后在判断用户是否授权,
    @Override
    public void onRequestPermissionsResult(int requestCode,String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                  //在这里执行读取通讯录方法
                } else {
                    Toast.makeText(this, "获取联系人权限失败", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }

2:这里我做了一个工具类,获取到联系人的所有具体信息,具体如下

import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.CommonDataKinds.Im;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
import android.provider.ContactsContract.CommonDataKinds.Note;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.util.Log;import org.json.JSONException;
import org.json.JSONObject;public class ContactType {private final Context context;private JSONObject contactData;private JSONObject jsonObject;public ContactType(Context context) {this.context = context;}//获取联系人所有信息(这里返回String,你也可以直接返回其他类型改改就可以了)public String getInformation() throws JSONException {contactData = new JSONObject();int num = 0;// 获得所有的联系人Cursor cur = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null,null,null,ContactsContract.Contacts.DISPLAY_NAME+ " COLLATE LOCALIZED ASC");// 循环遍历if (cur.moveToFirst()) {int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);do {jsonObject = new JSONObject();contactData.put("information" + num, jsonObject);num++;// 获得联系人的ID号String contactId = cur.getString(idColumn);// 获得联系人姓名String disPlayName = cur.getString(displayNameColumn);// 查看该联系人有多少个电话号码。如果没有这返回值为0int phoneCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));jsonObject.put("name", disPlayName);if (phoneCount > 0) {// 获得联系人的电话号码Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null);if (phones.moveToFirst()) {do {// 遍历所有的电话号码int phoneType = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); // 手机// 住宅电话if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_HOME) {String homeNum = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("homeNum", homeNum);}// 单位电话if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_WORK) {String jobNum = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("jobNum", jobNum);}// 单位传真if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK) {String workFax = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("workFax", workFax);}// 住宅传真if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME) {String homeFax = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("homeFax", homeFax);} // 寻呼机if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_PAGER) {String pager = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("pager", pager);}// 回拨号码if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_CALLBACK) {String quickNum = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("quickNum", quickNum);}// 公司总机if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN) {String jobTel = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("jobTel", jobTel);}// 车载电话if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_CAR) {String carNum = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("carNum", carNum);} // ISDNif (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_ISDN) {String isdn = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("isdn", isdn);} // 总机if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_MAIN) {String tel = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("tel", tel);}// 无线装置if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_RADIO) {String wirelessDev = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("wirelessDev", wirelessDev);} // 电报if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_TELEX) {String telegram = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("telegram", telegram);}// TTY_TDDif (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_TTY_TDD) {String tty_tdd = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("tty_tdd", tty_tdd);}// 单位手机if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE) {String jobMobile = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("jobMobile", jobMobile);}// 单位寻呼机if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_WORK_PAGER) {String jobPager = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("jobPager", jobPager);} // 助理if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_ASSISTANT) {String assistantNum = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("assistantNum", assistantNum);} // 彩信if (phoneType == ContactsContract.CommonDataKinds.Phone.TYPE_MMS) {String mms = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("mms", mms);}String mobileEmail = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));jsonObject.put("mobileEmail", mobileEmail);String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));jsonObject.put("phoneNumber", phoneNumber);} while (phones.moveToNext());}}// 获取该联系人邮箱Cursor emails = context.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null);if (emails.moveToFirst()) {do {// 遍历所有的电话号码
//                        String emailType = emails
//                                .getString(emails
//                                        .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));String emailValue = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
//                        jsonObject.put("emailType", emailType);jsonObject.put("emailValue", emailValue);} while (emails.moveToNext());}// 获取该联系人IMCursor IMs = context.getContentResolver().query(Data.CONTENT_URI,new String[]{Data._ID, Im.PROTOCOL, Im.DATA},Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"+ Im.CONTENT_ITEM_TYPE + "'",new String[]{contactId}, null);if (IMs.moveToFirst()) {do {String protocol = IMs.getString(IMs.getColumnIndex(Im.PROTOCOL));String date = IMs.getString(IMs.getColumnIndex(Im.DATA));jsonObject.put("protocol", protocol);jsonObject.put("date", date);} while (IMs.moveToNext());}// 获取该联系人地址Cursor address = context.getContentResolver().query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null);if (address.moveToFirst()) {do {// 遍历所有的地址String street = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));String city = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));String region = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));String postCode = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));String formatAddress = address.getString(address.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));jsonObject.put("street", street);jsonObject.put("city", city);jsonObject.put("region", region);jsonObject.put("postCode", postCode);jsonObject.put("formatAddress", formatAddress);} while (address.moveToNext());}// 获取该联系人组织Cursor organizations = context.getContentResolver().query(Data.CONTENT_URI,new String[]{Data._ID, Organization.COMPANY,Organization.TITLE},Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"+ Organization.CONTENT_ITEM_TYPE + "'",new String[]{contactId}, null);if (organizations.moveToFirst()) {do {String company = organizations.getString(organizations.getColumnIndex(Organization.COMPANY));String title = organizations.getString(organizations.getColumnIndex(Organization.TITLE));jsonObject.put("company", company);jsonObject.put("title", title);} while (organizations.moveToNext());}// 获取备注信息Cursor notes = context.getContentResolver().query(Data.CONTENT_URI,new String[]{Data._ID, Note.NOTE},Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"+ Note.CONTENT_ITEM_TYPE + "'",new String[]{contactId}, null);if (notes.moveToFirst()) {do {String noteinfo = notes.getString(notes.getColumnIndex(Note.NOTE));jsonObject.put("noteinfo", noteinfo);} while (notes.moveToNext());}// 获取nickname信息Cursor nicknames = context.getContentResolver().query(Data.CONTENT_URI,new String[]{Data._ID, Nickname.NAME},Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='"+ Nickname.CONTENT_ITEM_TYPE + "'",new String[]{contactId}, null);if (nicknames.moveToFirst()) {do {String nickname_ = nicknames.getString(nicknames.getColumnIndex(Nickname.NAME));jsonObject.put("nickname", nickname_);} while (nicknames.moveToNext());}} while (cur.moveToNext());}Log.e("联系人信息=====", contactData.toString());return contactData.toString();}}

3:用法很简单:

MoblieType mobiletype= new MoblieType(this);
//得到联系人字符串
String contactinfo=mobiletype.getContactInfo();

获取到的数据如下:

{"information0":{"name":"侯敏", "mobileEmail":"34346464664", "phoneNumber":"34346464664"
},"information1":{"name":"科大讯飞", "mobileEmail":"424554548484", "phoneNumber":"424554548484", "homeNum":"12234567890", "jobNum":"13334566", "homeFax":"158575757777", "workFax":"424554548484", "emailValue":"1507736530@qq.com", "protocol":"1", "date":"灵敏", "street":"你明明敏敏婆婆", "formatAddress":"你明明敏敏婆婆", "company":"大田", "title":"程序员", "noteinfo":"二货", "nickname":"啥子"
}
}

好了,告辞

Android获取手机联系人的基本信息(如姓名、电话、邮箱、备注)相关推荐

  1. Android获取手机联系人匹配用户表并按字母A Z排序展示

    1.前言 最近在做公司项目的时候遇到一个添加手机联系人的需求,主要有以下几个功能点: 读取联系人:读取用户手机上的通讯录里的联系人列表 好友排序:按照拼音顺序对好友进行排序,兼容英文数字符号等 字母索 ...

  2. Android 获取手机通讯录信息 — 头像、姓名和A-Z的快速查询

    首先先看一下效果图再说吧: 具体实现过程如下: 先在AndroidManifest.xml文件中添加读取联系人的权限: 1 <uses-permission android:name=" ...

  3. Android 获取手机通讯录信息 — 头像、姓名和A-Z的快速查询

    具体实现过程如下: 先在AndroidManifest.xml文件中添加读取联系人的权限: 1 <uses-permission android:name="android.permi ...

  4. Android 获取手机联系人代码

    ContentResolver resolver = getContentResolver();// 1. 查询raw_contacts表,把联系人的id取出来Uri uri = Uri.parse( ...

  5. Android获取手机联系人匹配用户表并按字母A-Z排序展示

    1.前言 最近在做公司项目的时候遇到一个添加手机联系人的需求,主要有以下几个功能点: 读取联系人:读取用户手机上的通讯录里的联系人列表 好友排序:按照拼音顺序对好友进行排序,兼容英文数字符号等 字母索 ...

  6. Android获取手机联系人或通讯录的基本信息(如姓名、电话)

    1.添加权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-p ...

  7. android 获取phone实例,Android ContentProvider获取手机联系人实例

    在做项目的时候,因为要用到我们自动获取联系人的姓名和电话,就想到了ContentProvider分享数据的功能,这样做既节省了时间,也减少了我们输入错误号码的几率,所以,想在这里把小demo分享给大家 ...

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

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

  9. android的contentResolver,contentProvider简介(附带个获取手机联系人及头像实例)

    介绍 android中有个ContentProvider(内容提供者)还有个ContentResolver(内容解析者) 简单来说,contentProvider就是将自己app的数据库共享,使得其他 ...

最新文章

  1. 专访博世王红星:大数据和AI将是中国制造业升级新动力
  2. matlab txt写入excel,怎么把matlab的GUI文本编辑器中的数据存入EXCEl
  3. EntityFramework 学习: Console中初见
  4. mysql生产环境运维方案_[MySQL生产环境] Innodb存储引擎内存报警问题处理过程
  5. org.springframework.uti包下的StringUtils的使用和org.apache.commons.lang包下StringUtils的使用
  6. JavaScript 的函数式编程与面向对象编程区别在哪?
  7. ideagit更新一个文件_idea使用ssh下载的git代码怎么没法更新
  8. 【王道计组笔记】储存系统(1):基本概念
  9. 查找有序数组中某个数首次出现的位置
  10. 计算机桌面保护程序,屏幕保护程序软件
  11. 计算机控制系统的数字量输出通道由,计算机控制-习题
  12. 中央银行会计核算数据集中系统(ACS系统)
  13. 光栅图形学-中点画线法
  14. SQL Server 2008 远程过程调用失败的问题解决方法
  15. Apsara Clouder基础技能认证-阿里巴巴编程规范考试真题
  16. Pandas与SQL比较
  17. 计算机运行断电 硬盘,电脑突然断电的坏处有哪些?你知道吗?
  18. owlBus 的uwp版本上架了
  19. Apache shiro 漏洞总结
  20. 关于三子棋(井字棋)小游戏

热门文章

  1. 罗马java_关于java:罗马数字转十进制的三种方法
  2. 1397 火车票退票费计算(函数专题)
  3. IP-guard双机热备使用指南
  4. 品牌在社交电商领域的痛点
  5. 计算机小游戏有哪些,4399电脑小游戏中有一个和lol类似的游戏叫什么
  6. ubuntu 18.04 局域网无法访问内部DNS的解决办法
  7. 软件定义汽车,进入深水区
  8. C语言实验——某年某月的天数
  9. excel学习笔记:数据格式,单元格格式(快捷键,自动调整行列宽,条件格式,自定义格式,日期星期时间的设置,特殊数字,多种填充方式,从下拉列表选择,数据验证。)
  10. 学校BBS上C版总结的月经贴,感觉很不错