的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 { } 
+0

谢谢,这是完美的作品 –