我使用此代码更新联系人的地址,但它仅适用于具有现有地址的联系人。如果联系人地址字段为空,则 update() 方法返回零并且不更新联系人数据。如何向现有联系人添加地址?
//str_id is the contact's ID
//input is the String representing an address
ContentValues cv = new ContentValues();
String[] params = new String[] { str_id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE };
cv.put(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input);
getContentResolver().update(ContactsContract.Data.CONTENT_URI, cv, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?", params);
我也尝试了 ContentProviderOperation 的等效逻辑,但得到了相同的结果。就像我之前的示例一样,我可以更新现有地址但不能创建地址。
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, id)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS, input)
.build());