最后,我发现了如何更新联系人,这是update方法的代码:
public void update() { int id = 1; String firstname = "Contact's first name"; String lastname = "Last name"; String number = "000 000 000"; String photo_uri = "android.resource://com.my.package/drawable/default_photo"; ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); // Name Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI); builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}); builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastname); builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstname); ops.add(builder.build()); // Number builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI); builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?"+ " AND " + ContactsContract.CommonDataKinds.Organization.TYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_HOME)}); builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number); ops.add(builder.build()); // Picture try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(photo_uri)); ByteArrayOutputStream image = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG , 100, image); builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI); builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE}); builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray()); ops.add(builder.build()); } catch (Exception e) { e.printStackTrace(); } // Update try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { e.printStackTrace(); } }该字段
id是将新联系人插入数据库时返回的原始联系人ID。这是获取此ID的代码:
ContentProviderResult[] res; try { res = KramerApplication.getInstance().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); if (res != null && res[0] != null) { String uri = res[0].uri.getPath().substring(14); r.setBook_id( new Integer(uri).intValue() ); } } catch (Exception e) { e.printStackTrace(); }如果您想进一步了解如何插入/删除联系人,请查看我的第一个问题。



