最近的项目是关于通讯录的,下面是一些联系人操作的代码。。。。。。
/**
* 保存个人信息
*/
private void savaCardData() {
String name,position,mobilePhone1,mobilePhone2,email,address,company;
name = mCardName.getText().toString().trim();
position = mCardPosition.getText().toString().trim();
mobilePhone1 = mCardMobilePhone.getText().toString().trim();
mobilePhone2 = mCardMobilePhoneMore.getText().toString().trim();
String[] phoneArr = {mobilePhone1,mobilePhone2};
email = mCardEmail.getText().toString().trim();
company = mCardCompany.getText().toString().trim();
address = mCardAddress.getText().toString().trim();
long raw_contact_id = ContactsDBReader.getRawContactId(getContentResolver(), mContactId);
updateNameInfo(name, raw_contact_id);
updateJobInfo(company, position, raw_contact_id);
updateEamilInfo(email, raw_contact_id);
updateAddressInfo(address, raw_contact_id);
updatePhoneInfo(phoneArr, raw_contact_id);
updatePhotoInfo();
}
/**
* 添加或者更改联系人头像
*/
private void updatePhotoInfo(){
if (mCardPhotoByte != null){
mDBReader.upDateOrInsertContactPhoto(this, mContactId, mCardPhotoByte);
}
}
/**
* 根据 contactId 获得 rawContactId
* @param cr
* @param contactId
* @return
*/
public static long getRawContactId(ContentResolver cr, long contactId) {
long rawContactId = -1;
if (contactId > 0) {
Cursor c = cr.query(RawContacts.CONTENT_URI, RAWID_VERSION,
RAWID_CLAUSE, new String[]{
String.valueOf(contactId)
}, null);
try {
if (c != null && c.getCount() > 0) {
c.moveToFirst();
rawContactId = c.getLong(0);
}
} finally {
if (c != null) {
c.close();
}
}
}
return rawContactId;
}
/**
* 根据 contactId 得到头像
* @param context
* @param contactId
* @return
*/
public static Bitmap getPhotoByContactId(Context context, final long contactId) {
Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_URI, Long.toString(contactId));
Uri photoUri = Uri.withAppendedPath(contactUri,
Contacts.Data.CONTENT_DIRECTORY);
Cursor photoCursor = context.getContentResolver().query(photoUri, new String[]{CommonDataKinds.Photo.PHOTO},
Data.MIMETYPE + "=?", new String[]{
CommonDataKinds.Photo.CONTENT_ITEM_TYPE
}, null);
photoCursor.moveToFirst();
Bitmap photo = null;
if (photoCursor != null && photoCursor.moveToFirst() && !photoCursor.isNull(0)) {
byte[] photoData = photoCursor.getBlob(0);
photo = BitmapFactory.decodeByteArray(photoData, 0,
photoData.length, null);
}
photoCursor.close();
if (photo == null) return null;
return photo;
}
/**
* 更新邮政地址信息
* @param address 地址
* @param raw_contact_id
*/
private void updateAddressInfo(String address,long raw_contact_id) {
ContentValues values = new ContentValues();
if(!"".equals(mOldAddress)){
values.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, address);
values.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);
mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values
, ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?"
, new String[]{raw_contact_id + "", ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE});
}else{
values.put(
ContactsContract.Contacts.Data.RAW_CONTACT_ID,
raw_contact_id);
values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, address);
values.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);
mContext.getContentResolver().insert(
ContactsContract.Data.CONTENT_URI, values);
}
}
/**
* 更新邮箱信息
* @param email 邮箱地址
* @param raw_contact_id
*/
private void updateEamilInfo(String email,long raw_contact_id) {
ContentValues values = new ContentValues();
if(!"".equals(mOldEmail)){
values.put(ContactsContract.CommonDataKinds.Email.DATA, email);
values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values
, ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?"
, new String[]{raw_contact_id + "", ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE});
}else{
values.put(
ContactsContract.Contacts.Data.RAW_CONTACT_ID,
raw_contact_id);
values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Email.DATA, email);
values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
mContext.getContentResolver().insert(
ContactsContract.Data.CONTENT_URI, values);
}
}
/**
* 更新电话信息
* @param phoneArr 手机号码(最多两个)
* @param raw_contact_id
*/
private void updatePhoneInfo(String[] phoneArr,long raw_contact_id) {
ContentValues values = new ContentValues();
if(!"".equals(mOldMobilePhone)){
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,"");
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ? AND "+ ContactsContract.CommonDataKinds.Phone.TYPE + "= ?";
String[] whereParams = new String[]{raw_contact_id+"", ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE+""};
mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI,values,where, whereParams);
insertMobilePhone(phoneArr, values, raw_contact_id);
}else{
insertMobilePhone(phoneArr,values,raw_contact_id);
}
/**
* 更新公司信息
* @param company 公司名称
* @param position 职位名称
* @param raw_contact_id
*/
private void updateJobInfo(String company, String position,long raw_contact_id) {
ContentValues values = new ContentValues();
// values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
if(("".equals(mOldCompany)) && ("".equals(mOldPosition))){
values.put(
ContactsContract.Contacts.Data.RAW_CONTACT_ID,
raw_contact_id);
values.put(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Organization.TITLE, position);
values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, company);
values.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
mContext.getContentResolver().insert(
ContactsContract.Data.CONTENT_URI, values);
}else{
values.clear();
values.put(ContactsContract.CommonDataKinds.Organization.TITLE, position);
values.put(ContactsContract.CommonDataKinds.Organization.COMPANY, company);
values.put(ContactsContract.CommonDataKinds.Organization.TYPE, ContactsContract.CommonDataKinds.Organization.TYPE_WORK);
mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI
, values
,ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?"
,new String[]{raw_contact_id+"", ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE});
}
}
/**
* 更新姓名
* @param name 姓名
* @param raw_contact_id
*/
private void updateNameInfo(String name,long raw_contact_id) {
ContentValues values = new ContentValues();
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,name);
mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?",
new String[]{raw_contact_id + "", ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE});
values.clear();
// 更新 姓 一般可不需要
values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME,"");
mContext.getContentResolver().update(ContactsContract.Data.CONTENT_URI,values, ContactsContract.RawContacts.Data.RAW_CONTACT_ID + "=? and " + ContactsContract.RawContacts.Data.MIMETYPE + "=?",
new String[] { raw_contact_id+"", ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE });
}