Windows phone 8.1 с использованием средства выбора контактов для получения электронной почты и номера телефона

Я использую следующий код, чтобы позволить пользователю выбирать контакты:

ContactPicker ContactPicker = new ContactPicker();

        ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);

        var Contacts = await ContactPicker.PickContactsAsync();


        if (Contacts.Count > 0)
        {
            foreach (Contact contact in Contacts)
            {
                string telephone = string.Empty;
                string email = string.Empty;
                if (contact.Phones.Count > 0)
                {
                    telephone = contact.Phones[0].Number;
                }
                if (contact.Emails.Count > 0)
                {
                    email = contact.Emails[0].Address;
                }
                PartyPerson person = new PartyPerson(DateTime.Now.ToString("PP_yyMMdd_hhmmss_ffff"), true, contact.DisplayName, 0, 0, 0, email, telephone);
                AddPartyPerson(person);
            }
        }
        ContactPicker = null;

Однако я получаю только номер телефона, объект «контакт» не содержит никаких адресов электронной почты, хотя они присутствуют в контактной информации. Один из вариантов - переключить:

   ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);

с

   ContactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);

Но тогда я не получаю номер телефона... Я хочу иметь возможность получить всю информацию за один выбор.

Есть ли способ выбрать обе информации с помощью одного выбора? (Я также пытался добавить более одной записи в DesiredFieldsWithContactFieldType, но потом получаю исключение...)

С наилучшими пожеланиями,

Керан

РЕДАКТИРОВАТЬ 07.08.2015: Поскольку «ContactPicker.DesiredFieldsWithContactFieldType» может принимать только один тип «ContactFieldType», способ, которым я работал, заключался в том, чтобы сначала разрешить пользователю получать контакты с помощью ContactFieldType.PhoneNumber, а затем я программно получаю адреса электронной почты выбранные контакты.

С точки зрения пользователя, это не будет проблемой, так как все будет правильно отображаться в ContactPicker.PickContactsAsync, нам просто нужно получить недостающую информацию об электронной почте вручную в коде программной части, что легко, поскольку мы знаем, какие контакты были выбранный пользователем.


person Keran    schedule 22.04.2015    source источник
comment
У меня тоже такая же проблема. Вы нашли решение?   -  person Nada Naoushi    schedule 10.06.2015


Ответы (1)


Попробуй это:

  ContactStore contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly);

  ContactPicker contactPicker = new ContactPicker();
  IList<Contact> pickedContacts = await contactPicker.PickContactsAsync();
  int pickedCount = pickedContacts != null ? pickedContacts.Count : 0;
  if (pickedCount > 0)
  {
       for (int i = 0; i < count; ++i)
       {
             Contact c = pickedContacts[i];
             Contact realContact = await contactStore.GetContactByIdAsync(c.Id);
             //...
       }
  }

Итак, сначала нужно получить «скелет» контакта, а потом можно получить из объекта ContactStore всю сущность контакта со всеми его свойствами.

У меня работает на Windows 10 Mobile. Там не должно быть большой разницы с Windows 8.

Надеюсь, поможет.

person robcsi    schedule 15.09.2015