的Android(Xamarin)更新联系人
问题描述:
我有一点麻烦更新联系人 - 昨天我设法改变我所有的联系方式,我的测试手机为“0主”上:-(的Android(Xamarin)更新联系人
我能创建(Create)全新接触就好使用下面的代码:
if (_IsNewContact)
{
List<ContentProviderOperation> ops = new List<ContentProviderOperation>();
ContentProviderOperation.Builder builder =
ContentProviderOperation.NewInsert(ContactsContract.RawContacts.ContentUri);
builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountType, null);
builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountName, null);
ops.Add(builder.Build());
//Name
builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.StructuredName.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.GivenName, _Contact.FirstName);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.FamilyName, _Contact.LastName);
ops.Add(builder.Build());
//Number
builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.Phone.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, _Contact.Phone);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type,
ContactsContract.CommonDataKinds.Phone.InterfaceConsts.TypeCustom);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Label, "Main");
ops.Add(builder.Build());
//Email
builder = ContentProviderOperation.NewInsert(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.Email.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Data, _Contact.Email);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type,
ContactsContract.CommonDataKinds.Email.InterfaceConsts.TypeCustom);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Label, "Main");
ops.Add(builder.Build());
//Add the new contact
ContentProviderResult[] result;
try
{
result = ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
}
catch { }
}
这里是我使用更新的代码,但目前它试图每一个接触改变所有的值更改为0主要
else
{
List<ContentProviderOperation> ops = new List<ContentProviderOperation>();
ContentProviderOperation.Builder builder =
ContentProviderOperation.NewUpdate(ContactsContract.RawContacts.ContentUri);
builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountType, null);
builder.WithValue(ContactsContract.RawContacts.InterfaceConsts.AccountName, null);
ops.Add(builder.Build());
//Name
builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.StructuredName.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.GivenName, _Contact.FirstName);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.FamilyName, _Contact.LastName);
ops.Add(builder.Build());
//Number
builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.Phone.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, _Contact.Phone);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type,
ContactsContract.CommonDataKinds.Phone.InterfaceConsts.TypeCustom);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Label, "Main");
ops.Add(builder.Build());
//Email
builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri);
builder.WithValueBackReference(ContactsContract.Data.InterfaceConsts.RawContactId, 0);
builder.WithValue(ContactsContract.Data.InterfaceConsts.Mimetype,
ContactsContract.CommonDataKinds.Email.ContentItemType);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Data, _Contact.Email);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Type,
ContactsContract.CommonDataKinds.Email.InterfaceConsts.TypeCustom);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Label, "Main");
ops.Add(builder.Build());
//Add the new contact
ContentProviderResult[] result;
try
{
result = ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
}
catch { }
}
答
下面的代码将允许您使用Xamarin原生android更新联系人。
// Name
String nameSelection = ContactsContract.Data.InterfaceConsts.RawContactId + " = ? AND "
+ ContactsContract.Data.InterfaceConsts.Mimetype + " = ? ";
String[] nameSelectionArgs = {
_Contact.DataId.ToString(),
ContactsContract.CommonDataKinds.StructuredName.ContentItemType
};
ContentProviderOperation.Builder builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri);
builder.WithSelection(nameSelection, nameSelectionArgs);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.GivenName, _Contact.FirstName);
builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.FamilyName, _Contact.LastName);
ops.Add(builder.Build());
// Phone
String phoneSelection = ContactsContract.Data.InterfaceConsts.RawContactId + " = ? AND "
+ ContactsContract.Data.InterfaceConsts.Mimetype + " = ? ";
String[] phoneelectionArgs = {
_Contact.DataId.ToString(),
ContactsContract.CommonDataKinds.Phone.ContentItemType
};
builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri);
builder.WithSelection(phoneSelection, phoneelectionArgs);
builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, _Contact.Phone);
ops.Add(builder.Build());
// Email
String emailSelection = ContactsContract.Data.InterfaceConsts.RawContactId + " = ? AND "
+ ContactsContract.Data.InterfaceConsts.Mimetype + " = ? ";
String[] emailSelectionArgs = {
_Contact.DataId.ToString(),
ContactsContract.CommonDataKinds.Email.ContentItemType
};
builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri);
builder.WithSelection(emailSelection, emailSelectionArgs);
builder.WithValue(ContactsContract.CommonDataKinds.Email.InterfaceConsts.Data, _Contact.Email);
ops.Add(builder.Build());
// Update the contact
ContentProviderResult[] result;
try
{
result = ContentResolver.ApplyBatch(ContactsContract.Authority, ops);
}
catch { }
谢谢,这是完美的作品 –