2017-12-06 8 views
0

私は、新しい連絡先の追加や既存の連絡先の更新など、デバイスの連絡先との操作を使用するXamarin.Formsベースのアプリケーションを使用しています。新しい連絡先の追加は機能しますが、連絡先の更新は機能しません。私はDependencyServiceの​​を使ってアンドロイドの連絡先を更新しました。最初にその連絡先を検索し、そのIDがあればそれを取得します。 以下は私のコードですXamarin.formsデバイスの連絡先が更新されない

void OnUpdate(){ 
var Id = LookupByPhone(phoneNumber, companyName+ " " + teamName); 
     if(Id!="0") 
     { 
      UpdateContact(phoneNumber, Id,companyName,teamName); 
      return; 
     } 
    } 

string LookupByPhone(string phoneNumber, string query = "") 
    { 
     var Id = "0"; 
     try 
     { 
      var context = MainActivity.Instance; 

      var uri = ContactsContract.Contacts.ContentUri; 
      uri = ContactsContract.CommonDataKinds.Phone.ContentUri; 

      string[] projection = { 
       ContactsContract.Contacts.InterfaceConsts.Id, 

       InterfaceConsts.DisplayName, 
       ContactsContract.CommonDataKinds.Phone.Number 
       }; 

      var cursor = context.ContentResolver.Query(uri, projection, null, null, null); 

      if (cursor.MoveToFirst()) 
      { 
       do 
       { 
        var id = cursor.GetString(cursor.GetColumnIndex(projection[0])); 
        var nm = cursor.GetString(cursor.GetColumnIndex(projection[1])); 
        var number = cursor.GetString(cursor.GetColumnIndex(projection[2])); 

        Id = id; 
        if (nm == query) 
         break; 

        //break; 
       } while (cursor.MoveToNext()); 
      } 
      cursor.Close(); 
     } 
     catch (Exception ex) 
     { 
      LogController.LogError(ex); 
     } 
     return Id; 
    } 



void UpdateContact(string phonenumber, string id, string givenName, string familyName) 
    { 
     ContentProviderOperation.Builder builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri); 


     List<ContentProviderOperation> ops = new List<ContentProviderOperation>(); 

     if (!string.IsNullOrWhiteSpace(givenName) && !string.IsNullOrWhiteSpace(familyName)) 
     { 
      // Name 
      String nameSelection = ContactsContract.Data.InterfaceConsts.ContactId + " = ? AND " 
            + ContactsContract.Data.InterfaceConsts.Mimetype + " = ? "; 
      String[] nameSelectionArgs = { 
              id.ToString(), 
              ContactsContract.CommonDataKinds.StructuredName.ContentItemType 
      }; 


      builder.WithSelection(nameSelection, nameSelectionArgs); 
      builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.GivenName, givenName); 
      builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.FamilyName, familyName); 
      builder.WithValue(ContactsContract.CommonDataKinds.StructuredName.DisplayName, givenName + " " + familyName); 

      ops.Add(builder.Build()); 
     } 

     #region Phone update 
     // CellPhone 
     String phoneSelection = ContactsContract.Data.InterfaceConsts.ContactId + " = ? AND " + 
            ContactsContract.Data.InterfaceConsts.Mimetype + " = ? AND " + 
            ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type + " = ?"; 

     String[] phoneselectionArgs = { 
       id.ToString(), 
        ContactsContract.CommonDataKinds.Phone.ContentItemType, 
       PhoneDataKind.Mobile.ToString() 
      }; 

     builder = ContentProviderOperation.NewUpdate(ContactsContract.Data.ContentUri); 
     builder.WithSelection(phoneSelection, phoneselectionArgs); 

     builder.WithValue(ContactsContract.CommonDataKinds.Phone.Number, phonenumber); 
     builder.WithValue(ContactsContract.CommonDataKinds.Phone.InterfaceConsts.Type, PhoneDataKind.Mobile.ToString()); 
     ops.Add(builder.Build()); 
     #endregion 

     // Update the contact 
     ContentProviderResult[] result; 
     try 
     { 
     // the result return count{0}     
     var result = MainActivity.Instance.ContentResolver.ApplyBatch(ContactsContract.Authority, ops); 

     } 
     catch (Exception ex) 
     { 
      LogController.LogError("Error updating phone:" + phonenumber,ex); 
     } 
    } 

エラーはありませんが、例外はありません。これに関する考え

答えて

0

IDを取得する方法は、この(それはあなたの方法で使用していないので、私は最初のパラメータを削除した)のようにする必要があります:

string LookupByPhone(string name) 
{ 
    string id = "0"; 
    var uri = ContactsContract.Contacts.ContentUri; 
    var cursor = this.ContentResolver.Query(
       uri, 
       new String[] { ContactsContract.Contacts.InterfaceConsts.Id }, 
       ContactsContract.Contacts.InterfaceConsts.DisplayName + 
       "='" + name + "'", null, null); 
    if (cursor.MoveToNext()) 
    { 
     id = cursor.GetString(cursor.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.Id)); 
    } 
    cursor.Close(); 
    return id; 
} 

あなたは、私がクエリによってどのような名前をIDを取得していることを確認できあなたは使用していますcompanyName + " " + teamName

関連する問題