2016-12-04 75 views
0

我有一點麻煩更新聯繫人 - 昨天我設法改變我所有的聯繫方式,我的測試手機爲「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 { } 
     } 

回答

2

下面的代碼將允許您使用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

謝謝,這是完美的作品 –