2016-12-04 11 views
0

を更新アンドロイド(Xamarin)私は連絡先を更新トラブルのビットを持っています連絡先

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

ありがとう、それは完璧に動作します –

関連する問題