获取手机通讯录以及添加联系人

Util代码:

package com.mfc.contractutil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
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;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.provider.ContactsContract.RawContacts;

/**
 * Created by Administrator on 2017/7/24.
 * 对通讯录进行操作的工具类
 */

public class ContractUtils {
    Context context;
    public ContractUtils(Context context) {
        this.context = context;
    }

    // 获取手机的通讯录(只获取姓名和id)
    public List<Map<String, String>> getAllContact(String uname) {
        ContentResolver contentResolver = context.getContentResolver();
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        Cursor cursor = null;
        if(uname!=null&&!uname.equals("")){
            cursor = contentResolver.query(uri, null,ContactsContract.Contacts.DISPLAY_NAME+" like '%"+uname+"%'" , null, null);
        }else{
            cursor = contentResolver.query(uri, null, null, null, null);
        }
        List<Map<String, String>> list = new ArrayList<Map<String, String>>();

        while (cursor.moveToNext()) {
            Map<String, String> map = new HashMap<String ,String>();
            String contactId = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts._ID));
            String name = cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            map.put("contactId", contactId);
            map.put("name", name);

            list.add(map);
        }
        return list;
    }

    // 根据联系人的id获取他的详细信息(手机号和邮件)
    // 思路:每个联系人可能有多个电话以及邮件,这时本方法返回的是一个map集合,集合里面存的是对象,对象可能有某个用户的所有电话(list集合)和所有的邮件(list集合)
    public Map<String, Object> getOneContact(String contactId) {
        Map<String, Object> map = new HashMap<String, Object>();
        ContentResolver contentResolver = context.getContentResolver();
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        // 查询姓名
        Cursor cursor = contentResolver.query(uri, null,
                ContactsContract.Contacts._ID + "="
                        + contactId, null, null);
        if(cursor.moveToFirst()){
            String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            map.put("name", name);
        }
        Cursor phones = contentResolver.query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
                        + contactId, null, null);
        List<String> phonelist=new ArrayList<String>();
        while (phones.moveToNext()) {

            String phoneNumber = phones
                    .getString(phones
                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            phonelist.add(phoneNumber);
        }
        map.put("phonelist", phonelist);
        phones.close();

        Cursor emails = contentResolver.query(
                ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Email.CONTACT_ID + "="
                        + contactId, null, null);
        List<String> emaillist=new ArrayList<String>();
        while (emails.moveToNext()) {
            String emailsAddress = emails
                    .getString(emails
                            .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
            emaillist.add(emailsAddress);

        }
        map.put("emaillist", emaillist);
        emails.close();
        return map;
    }


    public String save(Map<String,String> map) {
        ContentValues values = new ContentValues();
        //首选向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
        Uri  rawContactUri = context.getContentResolver().insert(RawContacts.CONTENT_URI, values);
        long rawContactId = ContentUris.parseId(rawContactUri);
        //往data表插入姓名数据
        values.clear();
        values.put(Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型
        values.put(StructuredName.GIVEN_NAME, map.get("name"));
        context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);

        //往data表插入电话数据
        values.clear();
        values.put(Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        values.put(Phone.NUMBER, map.get("phonenumber"));
        values.put(Phone.TYPE, Phone.TYPE_MOBILE);
        context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);

        //往data表插入email数
        values.clear();
        values.put(Data.RAW_CONTACT_ID, rawContactId);
        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
        values.put(Email.DATA, map.get("email"));
        values.put(Email.TYPE, Email.TYPE_WORK);
        context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
        return "添加联系人成功";
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值