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

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

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);

                // 查看该联系人有多少个电话号码。如果没有这返回值为0
                int 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);
                            } // ISDN
                            if (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_TDD
                            if (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());
                }

                // 获取该联系人IM
                Cursor 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":"啥子"
}
}

好了,告辞

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Android开发实验---通讯录 实验报告 通讯录 姓名: 学号: 课程名称: 移动应用开发 所在学院: 信息科学与工程学院 专业班级: 计算机 任课教师: Android开发实验---通讯录全文共25页,当前为第1页。 Android开发实验---通讯录全文共25页,当前为第1页。 实验项目名称 通讯录 实验目的与要求: 目的:练习掌握 Android 软件开发基本编程技术、Android 系统 SQLite 数据库的使用、通话、短信的使用等,设计制作一 Android 通讯录软件。 要求: (1)每位同学独立设计软件功能、完成软件的开发与测试。 (2)软件完成后由任课教师检查、提问软件功能、软件的设计和开发的代码。(3)每位同学独立完成实验报告(包括学号、姓名,实验目的、实验内容、软件功能、设计思想、实验总结等),并将实验报告和开发软件的工程文件压缩包提交任课教师。 实验设备及软件: 一台电脑,Androidstudio2.3.3软件 实验方法(原理、流程图) 实现的通讯录功能和界面可在实验开发中由每位同学自己设计,但必须使用 SQLite 数据库保存通讯录信息。 以下功能和软件界面供参考:仿照一般手机通讯录的使用界面和功能,主要功能可包括: (1)可以添加、删减联系人 (2)联系人信息包括:姓名手机号码、工作单位、群组、电子邮件、手机铃声 (3)选择联系人后,可以快速进行操作,如:拨打电话发送短信、查看详细、移出群组、移动分组、删除联系人等。查看详细时显示手机号码、群组、和设定的手机铃声以及同该联系人的通话记录。 (4)在联系人界面,可以查看各群组。点击群组,跳出对应联系人。 (5)有拨号键盘,点击数字将号码显示出来,并可以对手机号码进行删减 (6)可以发送信息,显示信息记录 (7)发送信息时,可以快速选择现有联系人。 实验过程、步骤及内容 通讯录界面要求布局合理简约,颜色舒,控制按钮简单明了,让用户一眼就能看出各个按钮的作用及操方法。能实要求的功能,但又不重复。要考到不同手机屏幕大小可能不一样,应尽兼容大多数手机屏幕尺寸,使之显示无障碍。 实现思路与简单设计 1. 关于通讯录获取联系人信息以及联系人信息的存储结构的分析。 2. 解决添加联系人的表中添加数据以及读取已保存的数据 3. 实现通讯录的基本功能的具体实现。 4. 对通讯录界面的具体设计,给人一种方便的操作通道。 5. 灵活应用各种系统库函数实现完整的通讯录。 Android开发实验---通讯录全文共25页,当前为第2页。开发流程图: Android开发实验---通讯录全文共25页,当前为第2页。 主要功能分析: 增加、删除、编联系人 点击通信录界面中的增加按钮,入增加联系人面。输入联系人基本信息,并可根据用户需求增加个性化信息如头像、姓名手机号码、办室电话、家庭电话、职务职称、单位名称、地址、邮政编码、Email、其他联系方式、备注这些信息,击确认返回主界面。点击通信录中一个已存在的联系人,进入联系人编辑界面,可修改系人的资料或进行删除联系人操作,完成后退回到主界面。对列表中联系人的标记,点mnu键弹出功能界面上的删除按键也可进行删除。还可以在菜单上选择删除全部联系人清空通讯录。在删除联系人的过程中,系统将提示用户是否继续操作,若放弃操作,则系人信息将继续保存。 2、查找联系人 用户点击menu键打开底部菜单框,底部菜单框为查询系人提供入口,进入通讯录的缺省页面为联系人列表,在列表中看到所有联系人姓名电话息排列,用户点击查找按键输入联系人基本信息,,通讯录显所有符合查询条件的联系人列表,用户选择一个联系人进入联系人基本信息页面进行其他操作;查询完成,用户按返回键返回主界面。 3、通功能 用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。 4、菜单能 通过对menu按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,菜单按键则包含显示所有、删除所有等实用功能。 增加联系人: 这个功能由ContactAdder类完成,具体实现不是比较麻烦,保存动作由ContentResolver类解决,但实现方式有所不同,可分为一次性批量增加与挨个增加。 由于界面设置繁琐,代码页过多,所以挑出其中的一部分进行说明 首先是DB数据库建库过程: Android开发实验---通讯录全文共25页,当前为第3页。package com.xample.hivian.my_contact_manager.models.db; import android.content.ContentValues; import android.database.Cursor; import android.database.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易明~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值