Android 查询本地通讯录联系人的信息

本文介绍了一种方法,用于从Android设备中读取并解析联系人信息,包括姓名、电话号码、电子邮件地址等,并提供了详细的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<span style="font-family: Arial, Helvetica, sans-serif;">package com.example.MyPhoneDEmo;</span>

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
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;

public class ContactActivity extends Activity {
    /** Called when the activity is first created. */
    private static final String TAG = "ContactActivity_Msg";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 获得所有的联系人
        Cursor cur = getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI,
                null,
                null,
                null,
                ContactsContract.Contacts.DISPLAY_NAME
                        + " COLLATE LOCALIZED ASC");
        // TODO 循环遍历
        if (cur.moveToFirst()) {
            int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);

            int displayNameColumn = cur
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

            do {
                // 获得联系人的ID号
                String contactId = cur.getString(idColumn);
                // 获得联系人姓名
                String disPlayName = cur.getString(displayNameColumn);

                // 查看该联系人有多少个电话号码。如果没有这返回值为0
                int phoneCount = cur
                        .getInt(cur
                                .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                Log.i("username", "username" + disPlayName);
                if (phoneCount > 0) {
                    // 获得联系人的电话号码
                    Cursor phones = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = " + contactId, null, null);
                    if (phones.moveToFirst()) {
                        do {
                            // 遍历所有的电话号码
                            String phoneNumber = phones
                                    .getString(phones
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            String phoneType = phones
                                    .getString(phones
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                            Log.i(TAG,  "phoneNumber = " + phoneNumber);
                            Log.i(TAG, "phoneType = " + phoneType);
                        } while (phones.moveToNext());
                    }
                }

                // 获取该联系人邮箱
                Cursor emails = 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));

                        Log.i(TAG, "emailType = " + emailType);
                        Log.i(TAG, "emailValue = " + emailValue);
                    } while (emails.moveToNext());
                }

                /*// 获取该联系人IM
                Cursor IMs = 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));
                        Log.i("protocol", protocol);
                        Log.i("date", date);
                    } while (IMs.moveToNext());
                }*/

                // 获取该联系人地址
                Cursor address = getContentResolver()
                        .query(
                                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                                null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                        + " = " + contactId, null, null);

                if (address.moveToFirst()) {
                    /*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));*/
                    do {
                        // 遍历所有的地址
                        String format = address
                                .getString(address
                                        .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
                        String ddress = address
                                .getString(address
                                        .getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS));
                        Log.i(TAG, "format  type = " + format);
                        Log.i(TAG, "format  Address = " + ddress);
                    } while (address.moveToNext());
                }

                // 获取该联系人组织
                Cursor organizations = 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));
                        Log.i(TAG,  "company = " + company);
                        Log.i(TAG, "title = " + title);
                    } while (organizations.moveToNext());
                }

                // 获取备注信息
                Cursor notes = 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));
                        Log.i(TAG, "noteinfo = " + noteinfo);
                    } while (notes.moveToNext());
                }

                /*// 获取nickname信息
                Cursor nicknames = 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));
                        Log.i(TAG, "nickname_ = " + nickname_);
                    } while (nicknames.moveToNext());
                }
*/
            } while (cur.moveToNext());

        }

    }

}

需要注意的是,手机号码,地址,邮箱等是多个的,要特别注意一下所需要的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值