如何从UWP中的联系人中获取生日?
问题描述:
我想创建一个简单的应用程序来获取联系人的出生日期。下面我已经实现了一些代码,但我不知道实际发生了什么。如何从UWP中的联系人中获取生日?
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();
}
}
在上面的代码中,我顺利拿到了电子邮件,姓名等,但因为没有可用像“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()
答
看来,使用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();
}
}
+0
谢谢你的回复@GraceFeng,我已经尝试过你的工作,并且我得到了期望的结果。谢谢 。你让我今天一整天都感觉很好。 –
错误消息说出了什么问题。 “序列不包含匹配的元素。”你问第一个'ContactDate'是一个生日,但如果没有一个呢? –
不,但我已经创建了一个联系人的出生日期,我正在尝试与那一个。虽然我没有得到生日。幸运的是,我找到了方法。看看@GraceFeng提供的下面的答案,BTW谢谢你的回复。 –
但你没有要求重返的重要日期。你没有说'contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.ImportantDate);' –