2016-10-29 2 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 =» + ContactId

Ваш запрос должен выглядеть следующим образом:

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

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

Этот запрос принесет вам номера телефонов для contact 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(); 
     }); 
    } 
} 
Смежные вопросы