如何从 UWP 中的联系人获取生日?
How to get birthdays from Contacts in 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();
}
}
我想创建一个简单的应用程序来获取联系人的出生日期。下面我已经实现了一些代码,但我不知道到底发生了什么。
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();
}
}