Windows phone 8.1 使用联系人选取器检索电子邮件和电话号码

Posted

技术标签:

【中文标题】Windows phone 8.1 使用联系人选取器检索电子邮件和电话号码【英文标题】:Windows phone 8.1 using Contact Picker to retrieve both email and phone number 【发布时间】:2015-06-29 18:21:18 【问题描述】:

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

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 移动版。与 Windows 8 应该没有太大区别。

希望对你有帮助。

【讨论】:

以上是关于Windows phone 8.1 使用联系人选取器检索电子邮件和电话号码的主要内容,如果未能解决你的问题,请参考以下文章

使用 Windows RT 的客户端证书(windows 8.1/windows phone 8.1)

使用 Ionic + Windows Phone 8.1 显示 InAppBrowser

使用 httpClient windows Phone 8.1 发布 JSON 对象

xml 适用于Windows 8.1和Windows Phone 8.1应用程序的扩展器控件演示。

xml 适用于Windows 8.1和Windows Phone 8.1应用程序的扩展器控件的模板。

StoreTest 工具包 Windows Phone 8.1