管理系统联系人之补充

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

使用ContentProvider管理联系人一文中介绍了对联系人的增加、查询。在本文将补充对联系人的修改和删除操作。下面使用到的contactId均是在基本表即ContactsContract.Contacts.CONTENT_URI里面查询出来的ID,代码如下:

删除联系人信息:

	/**
	 * 删除联系人信息
	 * 
	 * @param contactId
	 * @return
	 */
	public int deleteContact(int contactId) {
		Uri uri = ContentUris.withAppendedId(
				ContactsContract.Contacts.CONTENT_URI, contactId);
		int count = getContentResolver().delete(uri, null, null);
		return count;
	}


修改联系人姓名:

	/**
	 * 修改联系人姓名
	 * 
	 * @param contactId
	 * @param name
	 * @return
	 */
	public int updateContactName(int contactId, String name) {
		ContentValues values = new ContentValues();
		int index = name.length() / 2;
		String displayName = name;
		String givenName = null;
		String familyName = null;
		values.clear();
		// 检查是否是英文名称
		if (TextUtil.isEnglishName(displayName) == false) {
			givenName = name.substring(index);
			familyName = name.substring(0, index);
		} else {
			givenName = familyName = displayName;
		}
		values.put(StructuredName.DISPLAY_NAME, displayName);
		values.put(StructuredName.GIVEN_NAME, givenName);
		values.put(StructuredName.FAMILY_NAME, familyName);
		int count = getContentResolver()
				.update(ContactsContract.Data.CONTENT_URI,
						values,
						ContactsContract.Data.CONTACT_ID + "=?" + "AND "
								+ ContactsContract.Data.MIMETYPE + " = ?",
						new String[] { contactId + "",
								StructuredName.CONTENT_ITEM_TYPE });
		return count;
	}



当然增、删、改、查都可以使用ContentProviderOperation类来完成,如:

修改手机号码:

	/**
	 * 修改手机号码
	 * 
	 * @param contactId
	 * @param number
	 */
	public void updateContactNumber(int contactId, String number) {
		ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
		ops.add(ContentProviderOperation
				.newUpdate(ContactsContract.Data.CONTENT_URI)
				.withSelection(
						ContactsContract.Data.CONTACT_ID
								+ "=?"
								+ " AND "
								+ ContactsContract.Data.MIMETYPE
								+ "=?"
								+ " AND "
								+ ContactsContract.CommonDataKinds.Organization.TYPE
								+ "=?",
						new String[] {
								contactId + "",
								ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
								String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) })
				.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,
						number).build());
		try {
			getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (OperationApplicationException e) {
			e.printStackTrace();
		}
	}


 TextUtil工具类:

package com.home.util;

public class TextUtil {
	/**
	 * 检查是否是英文名称
	 * 
	 * @param name
	 * @return
	 */
	public static boolean isEnglishName(String name) {
		char[] nameChars = name.toCharArray();
		for (int i = 0; i < nameChars.length; i++) {
			if ((nameChars[i] >= 'a' && nameChars[i] <= 'z')
					|| (nameChars[i] >= 'A' && nameChars[i] <= 'Z')) {
				continue;
			}
			return false;
		}
		return true;
	}
}

另外补充完善一下添加联系人(之前在使用ContentProvider管理联系人一文中的添加方法不完善):

/**
	 * 新增联系人
	 * 
	 * @param name
	 * @param number
	 */
	public void addContact(String name, String number) {
		ContentValues contentValues = new ContentValues();
		Uri uri = getContentResolver().insert(RawContacts.CONTENT_URI,
				contentValues);
		long rowId = ContentUris.parseId(uri);
		// 插入姓名
		if (name != null) {
			contentValues.clear();
			contentValues.put(Data.RAW_CONTACT_ID, rowId);
			contentValues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
			int index = name.length() / 2;
			String displayName = name;
			String givenName = null;
			String familyName = null;
			// 检查是否是英文名称
			if (TextUtil.isEnglishName(displayName) == false) {
				givenName = name.substring(index);
				familyName = name.substring(0, index);
			} else {
				givenName = familyName = displayName;
			}
			contentValues.put(StructuredName.DISPLAY_NAME, displayName);
			contentValues.put(StructuredName.GIVEN_NAME, givenName);
			contentValues.put(StructuredName.FAMILY_NAME, familyName);
			getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
					contentValues);
		}

		if (number != null) {
			// 插入手机电话
			contentValues.clear();
			contentValues.put(Data.RAW_CONTACT_ID, rowId);
			contentValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
			contentValues.put(Phone.NUMBER, number);
			contentValues.put(Phone.TYPE, Phone.TYPE_MOBILE);
			getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
					contentValues);
		}
	}


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

u010142437

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值