2016-10-29 4 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(); 
     }); 
    } 
}