2016-10-29 28 views
0

我知道檢索以下代碼的聯繫人姓名。但是,我應該在這段代碼中更改哪些電話號碼與聯繫人列表關聯?Xamarin android查看聯繫方式和電話號碼

var uri = ContactsContract.Contacts.ContentUri; 

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

      var cursor = ManagedQuery(uri, projection, null, null, null); 

      var contactList = new List<string>(); 

      if (cursor.MoveToFirst()) 
      { 
       do 
       { 
        String phoneNumber = cursor.GetString(cursor.GetColumnIndex(ContactsContract.CommonDataKinds.Phone.Number)); 

       contactList.Add(cursor.GetString(
         cursor.GetColumnIndex(projection[1]))); 
      } while (cursor.MoveToNext()); 
     }     

回答

0

我碰到你的問題,而我最近寫了一個類似的代碼。你爲了獲取電話號碼,唯一需要的,就是:

  1. 再次查詢到烏里 ContactsContract.CommonDataKinds.Phone.ContentUri;
  2. 設置投影以包含ContactsContract.CommonDataKinds.Phone.Number;和
  3. 選擇基於ID,即選擇參數應當包括「_id =」 + 的ContactID

您的查詢應該是這樣的:

string[] projection = { ontactsContract.CommonDataKinds.Phone.Number }; 
string selection = "_id = " + contactId; 

var cursor = ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, projection, selection, null, null); 

這個查詢將帶給你的電話號碼爲聯繫人ID,但在下面的代碼中,由於性能問題,我只需撥打一個電話號碼,然後爲每個合同分配號碼。希望能幫助到你。

private List<Contact> GetContactList() 
{ 
    List<Contact> contacts = new List<Contact>(); 
    string[] projection = { 
       ContactsContract.Contacts.InterfaceConsts.Id, 
       ContactsContract.Contacts.InterfaceConsts.DisplayName, 
       ContactsContract.Contacts.InterfaceConsts.PhotoUri 
      }; 
    var uri = ContactsContract.Contacts.ContentUri; 
    ICursor cursor = ContentResolver.Query(uri, projection, null, null, null); 

    if (cursor.MoveToFirst()) 
    { 
     do 
     { 
      string id = cursor.GetString(cursor.GetColumnIndex(projection[0])); 
      string name = cursor.GetString(cursor.GetColumnIndex(projection[1])); 
      string photoUri = cursor.GetString(cursor.GetColumnIndex(projection[2])); 
      contacts.Add(new Contact() { Id = long.Parse(id), DisplayName = name, PhotoUri = photoUri }); 
     } while (cursor.MoveToNext()); 

     GetContactPhoneNumber(contacts); 
    } 

    return contacts; 
} 

private async void GetContactPhoneNumber(List<Contact> list) 
{ 
    string[] projection = 
     { 
        ContactsContract.CommonDataKinds.Phone.Number, 
        ContactsContract.CommonDataKinds.Phone.InterfaceConsts.ContactId 
       }; 

    var cursor = ContentResolver.Query(ContactsContract.CommonDataKinds.Phone.ContentUri, projection, null, null, null); 
    if (cursor.Count > 0) 
    { 
     await Task.Factory.StartNew(() => 
     { 
      do 
      { 
       try 
       { 
        string id = cursor.GetString(cursor.GetColumnIndex(projection[1])); 
        string phoneNumber = cursor.GetString(cursor.GetColumnIndex(projection[0])); 
        Contact contact = list.Where(c => c.Id == long.Parse(id)).FirstOrDefault(); 
        contact.PhoneNumber = phoneNumber; 
       } 
       catch 
       { 
       } 

      } while (cursor.MoveToNext()); 
      cursor.Close(); 
     }); 
    } 
}