我创建了一个具有读/写联系人权限的应用程序。我正在尝试制作一个更新功能,使用此功能获取新的显示名称,电子邮件地址和电话号码:
public void updateContact(Context ctx, String name, String number, String email,String ContactId) {
try {
name = name.trim();
email = email.trim();
number = number.trim();
ContentResolver contentResolver = ctx.getContentResolver();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] emailParams = new String[]{ContactId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE};
String[] nameParams = new String[]{ContactId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
String[] numberParams = new String[]{ContactId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};
ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<android.content.ContentProviderOperation>();
if(!email.equals(""))
{
ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
.withSelection(where,emailParams)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
.build());
}
if(!name.equals(""))
{
ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
.withSelection(where,nameParams)
.withValue(ContactsContract.Contacts.DISPLAY_NAME, name)
.build());
}
if(!number.equals(""))
{
ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
.withSelection(where,numberParams)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
.build());
}
contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}
}
可悲的是,这段代码没有对联系人进行任何更改,我很难找到原因。
感谢您的帮助:)
答案 0 :(得分:0)
好吧,没人帮助我,但我自己管理。
对于遇到同样问题的任何人,我都会发布我自己问题的答案。
以下代码将更新电话,姓名和电子邮件的联系人。
public static void updateContact(Context ctx, String name, String number, String email, Long id) {
try {
ContentValues contentValues;
long ret = id;
Log.i("contact id", ret + "");
if (!name.equals("")) {
contentValues = new ContentValues();
contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ret);
contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
ctx.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, contentValues);
}
if (!number.equals("")) {
contentValues = new ContentValues();
contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ret);
contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
int phoneContactType = ContactsContract.CommonDataKinds.Phone.TYPE_HOME;
contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, phoneContactType);
ctx.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, contentValues);
}
if (!email.equals("")) {
contentValues = new ContentValues();
contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ret);
contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
contentValues.put(ContactsContract.CommonDataKinds.Email.ADDRESS, email);
contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM);
ctx.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, contentValues);
}
} catch (Exception e) {
e.printStackTrace();
}
}