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, нам просто нужно вручную извлечь недостающую информацию электронной почты с помощью кода, что легко, поскольку мы знаем, какие контакты были выбранный пользователем.
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.
Надеюсь, поможет.