如何从UWP中的联系人获取生日?

时间:2016-07-08 01:31:14

标签: c# .net uwp windows-10-universal uwp-xaml

我想创建一个简单的应用来获取联系人的出生日期。下面我已经实现了一些代码,但我不知道实际发生了什么。

var contactPicker = new ContactPicker();
    contactPicker.CommitButtonText = "Select";
    contactPicker.SelectionMode = ContactSelectionMode.Fields;
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);

    var contacts = await contactPicker.PickContactsAsync();
    if (contacts != null && contacts.Count > 0)
    {
        try
        {
            foreach (Contact contact in contacts)
            {
                var birthday = contact.ImportantDates.First(d => d.Kind == 
                      ContactDateKind.Birthday);
                textBlock.Text = birthday.Day.ToString();

            }
        }
        catch (Exception w)
        {
            textBlock.Text = w.ToString();
        }                
    }

在上面的代码中,我成功地收到了电子邮件和姓名,但由于没有像#34; contacts.birthday"这样的方法,我无法过生日。谢谢。

我抓到的例外是:

'System.InvalidOperationException' in  System.Linq.dll 
System.InvalidOperationException: Sequence contains no matching element at 
System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2
predicate) at ContactApiSample.MainPage.<button_Click>d__1.MoveNext()

1 个答案:

答案 0 :(得分:0)

似乎使用ContactPicker无法获得所有联系信息。 IList<ContactDate> ImportantDates的计数始终为0.

我刚刚为您的方案找到了一种解决方法,如果您坚持在此处使用ContactPicker,则可以获取该联系人的ID,并使用此ID从ContactStore查找相同的联系人例如:

if (contacts != null && contacts.Count > 0)
{
    try
    {
        ContactStore allAccessStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

        foreach (Contact contact in contacts)
        {
            var storecontact = await allAccessStore.GetContactAsync(contact.Id);
            var birthday = storecontact.ImportantDates.First(d => d.Kind ==
          ContactDateKind.Birthday);
        }
    }
    catch (Exception w)
    {
        //textBlock.Text = w.ToString();
    }
}