备份在csdn上方便查阅
用于联系人获取,添加,删除,查询等操作。
public class ContactsAccessUtil {
final static String TAG = "ContactsAccess";
private final static String PhoneAccountName = "Phone";
final static String SIMAccountName = "SIM";
// 读取联系人信息
public static List<ContactData> getPhoneContacts(Context context, List<ContactData> list) {
if (list == null)
list = new ArrayList<ContactData>();
try {
ContentResolver contentResolver = context.getContentResolver();
Cursor cur = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur != null && cur.getCount() > 0) {
ArrayList<String> emailTelPhoneList = new ArrayList<String>();
ArrayList<String> emailPhoneList = new ArrayList<String>();
while (cur.moveToNext()) {
String id = cur.getString(
cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(
ContactsContract.Contacts.DISPLAY_NAME));
//获取电话号码
if (cur.getInt(cur.getColumnIndex(
ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
emailTelPhoneList =getTelphoneList(context,id);
}
emailPhoneList = getEmailList(context,id);
//添加到列表
ContactData data = new ContactData();
data.id = id;
data.name = name;
if (emailTelPhoneList.size()>0){ //我的项目只需要获取第一个联系电话
data.number = emailTelPhoneList.get(0);
}
if (emailPhoneList.size()>0){ //我的项目只需要获取第一个email
data.InsertDate =emailPhoneList.get(0);
}
list.add(data);
}
}
cur.close();
}catch (Exception e){
Log.e("getPhoneContacts","getPhoneContacts:"+e);
}
return list;
}
/**
* 获取Email
* @param id Contacts._ID
* @return
*/
public static ArrayList<String> getEmailList(Context context,String id){
ContentResolver contentResolver =context.getContentResolver();
// ArrayList<String> emailNameList=new ArrayList<String>();
ArrayList<String> emailPhoneList=new ArrayList<String>();
//===========获取Email
Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID+ " = " + id, null, null);
while (emails.moveToNext())
{
// This would allow you get several email addresses
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
// Log.v(name+"==>", emailAddress);
if ((!emailAddress.equalsIgnoreCase(""))&&(emailAddress.contains("@")))
{
// emailNameList.add(name);
emailPhoneList.add(emailAddress);
// emailIndex++;
}
}
emails.close();
return emailPhoneList;
}
public static ArrayList<String> getTelphoneList(Context context,String id){
ContentResolver contentResolver =context.getContentResolver();
// ArrayList<String> emailNameList=new ArrayList<String>();
ArrayList<String> emailPhoneNoList=new ArrayList<String>();
Cursor pCur = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
assert pCur != null;
while (pCur.moveToNext()) {
String phoneNo = pCur.getString(pCur.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));//ContactsContract.CommonDataKinds.Email.DATA
emailPhoneNoList.add(phoneNo);
}
pCur.close();
return emailPhoneNoList;
}
public static boolean insertPhoneContact(Context context, ContactData contact) {
/**
* 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
* 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
*/
Uri rcUri;
ContentValues values = new ContentValues();
// ContentResolver resolver = context.getContentResolver();
//首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
values.put(ContactsContract.RawContacts.ACCOUNT_NAME, PhoneAccountName);
values.put(ContactsContract.RawContacts.ACCOUNT_TYPE, "null");
values.put(ContactsContract.Contacts.DISPLAY_NAME, contact.getContactName());
Uri rawContactUri = context.getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
contact.setId(rawContactId + "");
//往data表入姓名数据
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);//内容类型
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, contact.getContactName());
// values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, contact.getInsertDate());//家庭
// values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getContactName());//家庭
rcUri = context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
if (rcUri != null) {
//往data表入电话数据
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getNumber());
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
rcUri = context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
//往data表里写入Email的数据
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Email.DATA, contact.getInsertDate()+"@palmv.cn");
values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
rcUri =context.getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
}
return (rcUri != null);
}
/**
* 根据contactId删除联系人数据
* 0失败
*/
public static int deletePhoneContact(Context context, String name, String contactId) {
ContentResolver resolver = context.getContentResolver();
int rc1, rc2;
//删除data表中数据
String where = ContactsContract.Data.CONTACT_ID + " =?";
String[] whereparams = new String[]{contactId};
rc1 = resolver.delete(ContactsContract.Data.CONTENT_URI, where, whereparams);
//删除rawContact表中数据
where = ContactsContract.RawContacts.CONTACT_ID + " =?";
whereparams = new String[]{contactId};
rc2 = resolver.delete(ContactsContract.RawContacts.CONTENT_URI, where, whereparams);
return (rc1 > 0 && rc2 > 0) ? (rc1 + rc2) : 0;
}
}