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 "添加联系人成功";
}
}