使用ContentResolver操作手机系统联系人

包括联系人的添加、数量查询和获取系统联系人!

package cn.hnshangyu.cloudcommunication.utils;

import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;

import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * Created by Administrator on 2017/1/6.
 * 添加联系人到系统数据库
 */

public class AddressBookUtils {
    /**
     * 往数据库中新增联系人
     *
     * @param mContext
     * @param name
     * @param phone
     */
    public static void AddContact(Context mContext, String name, String phone) {
        //创建一个空的ContentValues
        ContentValues values = new ContentValues();
        //向ContactsContract.RawContacts.CONTENT_URI执行一个空值插入
        //目的是获取系统返回的rawContactId,以便添加联系人名字和电话使用同一个id
        Uri rawContactUri = mContext.getContentResolver().insert(
                ContactsContract.RawContacts.CONTENT_URI, values);
        long rawContactId = ContentUris.parseId(rawContactUri);

        //清空values
        //设置id
        //设置内容类型
        //设置联系人姓名
        values.clear();
        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
        values.put(ContactsContract.Data.MIMETYPE,
                ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
        values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
        //向联系人URI添加联系人姓名
        mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

        //清空values
        //设置id
        //设置内容类型
        //设置联系人电话
        //设置电话类型
        values.clear();
        values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
        values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
        values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
        mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);

    }

    /**
     * 得到数据库数量信息
     */
    public static String getContactsDataNum(Context mContext) {
        //使用ContentResolver查找联系人数据
        Cursor cursor = mContext.getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        int count = cursor.getCount();

        //使用完毕关闭Cursor
        cursor.close();
        return String.valueOf(count);
    }

    /**
     * 得到数据库信息
     */
    public static List getContactsData(Context mContext) {
        //使用ContentResolver查找联系人数据
        Cursor cursor = mContext.getContentResolver().query(
                ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        CopyOnWriteArrayList mListItems = new CopyOnWriteArrayList<>();
        //便利查询结果,获取系统中的所有人
        while (cursor.moveToNext()) {
            //获取联系人id
            String contactId = cursor.getString(cursor.getColumnIndex(
                    ContactsContract.Contacts._ID));
            LogUtils.i("huangxiaoguo", contactId);
            /**
             * 获取联系人姓名
             */
            String name = cursor.getString(cursor.getColumnIndex(
                    ContactsContract.Contacts.DISPLAY_NAME));
            LogUtils.i("huangxiaoguo", name);

            //使用过ContentResolver通过id查找联系人的电话
            //此处为了方便显示,只取联系人的第一个号码(可能有多个号码)
            Cursor phones = mContext.getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId
                    , null, null);
            phones.moveToNext();
            /**
             * 联系人的电话
             */
            String phone = phones.getString(phones.getColumnIndex(
                    ContactsContract.CommonDataKinds.Phone.NUMBER));
            LogUtils.i("huangxiaoguo", phone);
            //使用完毕关闭Cursor
            phones.close();

            //创建Map添加到mListItems中用于创建SimpleAdapter
            HashMap listItem = new HashMap();
            listItem.put("name", name);
            listItem.put("phone", phone);
            mListItems.add(listItem);
        }
        //使用完毕关闭Cursor
        cursor.close();
        return mListItems;
    }
}

你可能感兴趣的:(android学习)