如何在Windows 10 UWP中访问联系人?

3

我想访问联系人数据,所以我做了一些研究,并从MSDN找到了以下文章。

访问联系人

从这篇文章中,我阅读了选择多个联系人部分,并使用了它,但每次电子邮件和电话值均为空。

我用于访问联系人的代码如下:

var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
contactPicker.CommitButtonText = "Select";
contacts = await contactPicker.PickContactsAsync();

PhoneContactsList.Items.Clear();

if (contacts != null && contacts.Count > 0)
{
    PhoneContactsList.Visibility = Windows.UI.Xaml.Visibility.Visible;
    foreach (Contact contact in contacts)
    {
        ContactData eachContact = new ContactData();
        eachContact.DisplayName = contact.DisplayName;
        if (contact.Emails.Count > 0)
        {
            eachContact.EmailAddress = contact.Emails[0].Address;
        }
        else if (contact.Phones.Count > 0)
        {
            eachContact.PhoneNumber = contact.Phones[0].Number;
        }
        contactsData.Add(eachContact);
    }
    PhoneContactsList.ItemsSource = contactsData;
}

请建议我在这里做错了什么?
更新
当我调试代码并检查时,我看不到任何值,唯一显示的是System._ComObject。我不知道它是什么意思。

你是否授权访问联系人? - Archana
是的,我已经在功能中检查了“联系人”。 - Kinjan Bhavsar
尝试了代码示例,不确定为什么它会返回 Null。 - Archana
1个回答

3

您需要按要求字段筛选联系人:

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)
{
    foreach (Contact contact in contacts)
    {
        Debug.WriteLine(contact.DisplayName + contact.Emails[0].Address);
    }
}

p.s. System._ComObject 是内部本机对象。您需要开启本机调试才能使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接