Windows Phone 8.1使用Contact Picker检索电子邮件和电话号码

时间:2015-04-22 08:24:32

标签: windows-phone-8.1 contactpicker

我使用以下代码允许用户选择联系人:

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 个答案:

答案 0 :(得分: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);
             //...
       }
  }

所以,你首先需要获得&#34;骨架&#34;联系人,然后您可以从ContactStore对象获取整个联系人实体及其所有属性。

它适用于Windows 10 Mobile。与Windows 8没有多大区别。

希望它有所帮助。