【问题标题】:UWP Contact picker picks only names' fields of contacts in Windows 10 MobileUWP 联系人选择器仅在 Windows 10 移动版中选择联系人的姓名字段
【发布时间】:2020-02-23 08:25:42
【问题描述】:

使用 UWP 应用程序中的联系人选择器来选择联系人,如 here 所述,在 PC 上正常工作,而在移动设备上,它只能返回名称字段(姓名、名字、姓氏、全名),但没有其他内容,例如地址、电话、电子邮件...等

var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
Contact contact = await contactPicker.PickContactAsync();
if (contact != null)
    {
    string xx = "";

        if (contact.Addresses.Count > 0) 
            {
                if (!String.IsNullOrEmpty(contact.Addresses[0].Country)) xx+="Country: "+ contact.Addresses[0].Country+"\n";
                if (!String.IsNullOrEmpty(contact.Addresses[0].Description)) xx+="Description: "+ contact.Addresses[0].Description+"\n";
                if (!String.IsNullOrEmpty(contact.Addresses[0].Locality)) xx+="Locality: "+ contact.Addresses[0].Locality+"\n";
                if (!String.IsNullOrEmpty(contact.Addresses[0].PostalCode)) xx+="PostalCode: "+ contact.Addresses[0].PostalCode+"\n";
                if (!String.IsNullOrEmpty(contact.Addresses[0].Region)) xx+="Region: "+ contact.Addresses[0].Region+"\n";
                if (!String.IsNullOrEmpty(contact.Addresses[0].StreetAddress)) xx+="StreetAddress: "+ contact.Addresses[0].StreetAddress+"\n";
            }
        if (!String.IsNullOrEmpty(contact.DisplayName)) xx+="DisplayName: "+ contact.Addresses[0].DisplayName+"\n";
        if (!String.IsNullOrEmpty(contact.DisplayNameOverride)) xx+="DisplayNameOverride: "+ contact.Addresses[0].DisplayNameOverride+"\n";
        if (contact.Emails.Count > 0)
            {
                if (!String.IsNullOrEmpty(contact.Emails[0].Address)) xx+="Email: "+ contact.Addresses[0].Address+"\n";
            }
        if (!String.IsNullOrEmpty(contact.FirstName)) xx+="FirstName: "+ contact.Addresses[0].FirstName+"\n";
        if (!String.IsNullOrEmpty(contact.FullName)) xx+="FullName: "+ contact.Addresses[0].FullName+"\n";
        if (!String.IsNullOrEmpty(contact.LastName)) xx+="LastName: "+ contact.Addresses[0].LastName+"\n";
        if (!String.IsNullOrEmpty(contact.MiddleName)) xx+="MiddleName: "+ contact.Addresses[0].MiddleName+"\n";
        if (!String.IsNullOrEmpty(contact.Name)) xx+="Name: "+ contact.Addresses[0].Name+"\n";
        if (!String.IsNullOrEmpty(contact.Nickname)) xx+="Nickname: "+ contact.Addresses[0].Nickname+"\n";
        if (contact.Phones.Count > 0)
            {
                if (!String.IsNullOrEmpty(contact.Phones[0].Number)) xx+="Phone: "+ contact.Addresses[0].Number+"\n";
            }

        textBlock.Text = xx;
    }

在 PC 上正常工作并显示所选联系人的数据。但是在运行 Win 10 Mobile 的移动设备上运行它时,它只显示所选联系人的姓名。

【问题讨论】:

    标签: uwp win-universal-app windows-10-universal


    【解决方案1】:

    我在Document中测试了代码,软件可以显示联系人姓名、邮箱、电话等信息。

    通过对比你的代码,我发现你可能缺少DesiredFieldsWithContactFieldType的定义。

    尝试将这些添加到您的代码中:

    ContactPicker contactPicker = new ContactPicker();
    
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email);
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Address);
    contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
    
    Contact contact = await contactPicker.PickContactAsync();
    

    添加后,ContactPicker 将挑选包含这些字段的联系人,以便获取您想要的信息。

    最好的问候。

    【讨论】:

    • 部分效果更好。添加它们后,它现在会显示所选联系人的详细信息(电子邮件、地址和电话号码),以便用户选择其中之一。因此,用户可以选择电子邮件、地址或电话号码,但数量不多!即,如果联系人有电话号码和电子邮件地址,用户可以选择任一电话号码电子邮件地址!!
    • 对不起,我不清楚你的意思。 contactPicker.PickContactAsync() 可以得到联系人的所有信息,包括所有的电话,所有的电子邮件地址。您可以决定哪些显示和哪些不显示。需要对获取到的IList<ContactEmail>IList<ContactPhone>进行过滤。您在筛选过程中是否遇到问题?
    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2014-06-29
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2011-08-10
    相关资源
    最近更新 更多