首页 > 代码库 > 对联系人进行增删改查

对联系人进行增删改查

我已经将联系人操作的方法进行了封装,暴露了几个重要的方法,方便以后调用。

1. public void printContactsList() // 获取到的联系人列表(用于测试用)

2. public ArrayList<ContactBean> getContactsList() // 得到手机和SIM卡中的联系人列表(姓名 + 电话号码)

3. public void add(String name, String phoneNumber) // 添加一个新的联系人数据

4. public boolean delete(String name) // 删除单个联系人数据

5. public boolean update(String name, String phoneNumber) // 更新联系人数据

6. public boolean findNameByPhoneNumber(String phoneNumber) // 根据电话号码查询姓名

 

增删改查通讯录:http://blog.csdn.net/xiazdong/article/details/7713419

监听联系人的改变:http://www.eoeandroid.com/thread-234378-1-1.html

 

全部代码:

package com.kale.contatctest;import java.util.ArrayList;import java.util.Collection;import android.content.ContentResolver;import android.content.ContentUris;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.Contacts.Data;import android.text.TextUtils;import android.util.Log;import android.widget.Toast;public class ContactsManager {    private Context mContext = null;    public ContactsManager(Context context) {        mContext = context;    }    /**     * @description 打印获取到的联系人列表(用于测试用)     *     */    public void printContactsList() {        System.out.println("showContactsList----------------->" + getContactsList().size());        for (int i = 0; i < getContactsList().size(); i++) {            ContactBean cb = new ContactBean();            cb = getContactsList().get(i);            System.out.println(i + 1 + "  " + cb.getContactName() + "  " + cb.getPhoneNumber());        }    }    /**     * @description 得到手机和SIM卡中的联系人列表(姓名 + 电话号码)     *     * @return     */    public ArrayList<ContactBean> getContactsList() {        ArrayList<ContactBean> contactsList = new ArrayList<ContactBean>();        Collection<ContactBean> collection = getPhoneList();        contactsList.addAll(collection);        collection.clear();        collection = getSIMList();        contactsList.addAll(collection);        return contactsList;    }    /**     * 将“手机通讯录”联系人添加到list中     */    private ArrayList<ContactBean> getPhoneList() {        Uri uri = Phone.CONTENT_URI;        return getContactsList(uri);    }    /**     * 将“手机SIM”联系人添加到list中     */    private ArrayList<ContactBean> getSIMList() {        Uri uri = Uri.parse("content://icc/adn");        return getContactsList(uri);    }    /**     * @param uri     * @return 根据URL来得到手机/SIM卡中的联系人列表     */    private ArrayList<ContactBean> getContactsList(Uri uri) {        ArrayList<ContactBean> list = new ArrayList<ContactBean>();        ContentResolver resolver = mContext.getContentResolver();        /*         * 获取库Phone表字段,仅仅获取电话号码联系         * 它所指向的其实是“content://com.android.contacts/data/phones”。         * 这个URL对应着contacts表 和 raw_contacts表 以及 data表 所以说我们的数据都是从这三个表中获取的。         */        String[] PHONES_PROJECTION = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER, Phone.CONTACT_ID };        Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, null, null, null);        if (phoneCursor != null) {            while (phoneCursor.moveToNext()) {                // 得到手机号码                String phoneNumber = phoneCursor.getString(1);                // 当手机号码为空的或者为空字段 跳过当前循环,即使这个联系人有名字也跳出循环                if (TextUtils.isEmpty(phoneNumber)) {                    continue;                }                // 如果有电话好么,那么就得到联系人名称                String contactName = phoneCursor.getString(0);                ContactBean cb = new ContactBean();                cb.setContactName(contactName);                cb.setPhoneNumber(phoneNumber);                list.add(cb);            }            phoneCursor.close(); // 关闭指针        }        return list;    }    /**     * 添加一个新的联系人数据     *      * @param name     * @param phoneNumber     * @return 是否添加成功     */    public void add(String name, String phoneNumber) {        // 根据号码找数据,如果存在则不添加,因为有号码但无名字是不允许的        // if (!findNameByPhoneNumber(phoneNumber)) {        // 插入raw_contacts表,并获取_id属性        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");        ContentResolver resolver = mContext.getContentResolver();        ContentValues values = new ContentValues();        long contact_id = ContentUris.parseId(resolver.insert(uri, values));        // 插入data表        uri = Uri.parse("content://com.android.contacts/data");        // 添加姓名        values.put("raw_contact_id", contact_id);        values.put(Data.MIMETYPE, "vnd.android.cursor.item/name");        values.put("data2", name);        // values.put("data1", "Jack");        resolver.insert(uri, values);        values.clear();        // 添加手机号码        values.put("raw_contact_id", contact_id);        values.put(Data.MIMETYPE, "vnd.android.cursor.item/phone_v2");        values.put("data2", "2"); // 2表示手机        values.put("data1", phoneNumber);        resolver.insert(uri, values);        values.clear();    }    /**     * 删除单个联系人数据     *      * @param name     * @return 是否删除成功     */    public boolean delete(String name) {        try {            // 根据姓名求id            Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");            ContentResolver resolver = mContext.getContentResolver();            Cursor cursor = resolver.query(uri, new String[] { Data._ID }, "display_name = ?", new String[] { name }, null);            if (cursor.moveToFirst()) {                int id = cursor.getInt(0);                // 根据id删除data中的相应数据                resolver.delete(uri, "display_name = ?", new String[] { name });                uri = Uri.parse("content://com.android.contacts/data");                resolver.delete(uri, "raw_contact_id = ?", new String[] { id + "" });                return true;            }        } catch (Exception e) {            e.printStackTrace();        }        Toast.makeText(mContext, "删除失败", Toast.LENGTH_SHORT).show();        return false;    }    /*     * // 删除全部联系人,十分耗时间。有错误 public boolean deleteAllContact() { ContentResolver     * resolver = mContext .getContentResolver(); Cursor contactsCur =     * resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null,     * null); while(contactsCur.moveToNext()){ //获取ID String rawId =     * contactsCur.     * getString(contactsCur.getColumnIndex(ContactsContract.Contacts._ID));     * //删除 String where = ContactsContract.Data._ID + " =?"; String[]     * whereparams = new String[]{rawId};     * resolver.delete(ContactsContract.RawContacts.CONTENT_URI, where,     * whereparams); } if(contactsCur.moveToNext() == false){ return true; }     * return false; }     */    /*     * //删除全部数据 public boolean deleteAll(){ getContentResolver().delete(     * ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId), null,     * null); try { ContentResolver resolver = mContext .getContentResolver();     * Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");     * resolver.delete(uri, "display_name= true", new String[]{"true"}); uri =     * Uri.parse("content://com.android.contacts/data"); resolver.delete(uri,     * "raw_contact_id= true", new String[]{"true"});     *      * } catch (Exception e) { Toast.makeText(mContext, "删除失败",     * Toast.LENGTH_SHORT).show(); e.printStackTrace(); } return false; }     */    /**     * @description 更新联系人数据     *      * @param name     * @param phoneNumber     * @return 是否更新成功     */    public boolean update(String name, String phoneNumber) {        try {            // 根据姓名求id,再根据id删除            Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");            ContentResolver resolver = mContext.getContentResolver();            Cursor cursor = resolver.query(uri, new String[] { Data._ID }, "display_name = ?", new String[] { name }, null);            if (cursor.moveToFirst()) {                int id = cursor.getInt(0);                Uri mUri = Uri.parse("content://com.android.contacts/data");// 对data表的所有数据操作                ContentResolver mResolver = mContext.getContentResolver();                ContentValues values = new ContentValues();                values.put("data1", phoneNumber);                mResolver.update(mUri, values, "mimetype=? and raw_contact_id=?",                         new String[] { "vnd.android.cursor.item/phone_v2", id + "" });                return true;            }        } catch (Exception e) {            e.printStackTrace();        }        Toast.makeText(mContext, "修改失败", Toast.LENGTH_SHORT).show();        return false;    }    /**     * @description 根据电话号码查询姓名     *     * @param phoneNumber     * @return 查询是否成功     */    public boolean findNameByPhoneNumber(String phoneNumber) {        // URI = content://com.android.contacts/data/phones/filter/#        Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + phoneNumber);        ContentResolver resolver = mContext.getContentResolver();        // 从raw_contact表中返回display_name        Cursor cursor = resolver.query(uri, new String[] { Data.DATA4 }, null, null, null);         if (cursor.moveToFirst()) {            Log.d("ContactsManager", "找到这个号码");            return true;        } else {            Log.e("ContactsManager", "没找到这个号码");            return false;        }    }}

 

对联系人进行增删改查