本文共 4281 字,大约阅读时间需要 14 分钟。
随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。
在一文中介绍了对联系人的增加、查询。在本文将补充对联系人的修改和删除操作。下面使用到的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) { ArrayListTextUtil工具类:ops = new ArrayList (); 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(); } }
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; }}
另外补充完善一下添加联系人(之前在一文中的添加方法不完善):
/** * 新增联系人 * * @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); } }
转载地址:http://pbvei.baihongyu.com/