如何向ContactStore.Contact.Phones写入内容?

7
从我的应用程序中使用StoredContactContactStore创建联系人,使用GetPropertiesAsync通过KnwonContactProperties.MobileTelephone设置移动电话号码。

这很好,我可以在People中看到移动电话号码。

但是...

如果我尝试通过ContactManager.RequestStoreAsync编程方式访问联系人,我在contact.Phones集合中看不到该电话号码。

有没有办法将电话号码写入Phones集合中?

(相关问题)


PS:我希望这可以在8.1和10上运行... - Benjol
1个回答

1

KnownContactProperties类位于Windows.Phone.PhoneContract命名空间下,但ContactManager.RequestStoreAsync()位于Windows.ApplicationModel.Contacts命名空间下。这可能是您无法获取电话号码的原因。在Windows.Phone.PhoneContract下的ContactStore.CreateOrOpenAsync方法与KnownContactProperties相同,可以正常工作。以下是一个完成的演示,用于插入联系人,然后获取联系人的姓名和电话号码。

XAML代码

<StackPanel>
    <TextBox x:Name="txtName" Header="name" InputScope="NameOrPhoneNumber"/>
    <TextBox x:Name="txtTel" Header="phone number 1" InputScope="ChineseHalfWidth"/>
    <TextBox x:Name="txtTel1" Header="phone number 2" InputScope="TelephoneNumber"/>
    <Button x:Name="btnSave" Content="Save" Click="btnSave_Click"/>
    <Button x:Name="btnGet" Content="GET" Click="btnGet_Click"/> 
</StackPanel>

代码后台
 private async void btnSave_Click(object sender, RoutedEventArgs e)
 {
     var name = txtName.Text;
     var tel = txtTel.Text;

     ContactStore contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly);
     ContactInformation contactInformation = new ContactInformation();
     contactInformation.DisplayName = name;
     var contactProps = await contactInformation.GetPropertiesAsync();
     contactProps.Add(KnownContactProperties.MobileTelephone, tel);
     StoredContact storedContact = new StoredContact(contactStore, contactInformation);
     await storedContact.SaveAsync();
 }

 private async void btnGet_Click(object sender, RoutedEventArgs e)
 {

     ContactStore contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly);
     var result = contactStore.CreateContactQuery();
     var count = await result.GetContactCountAsync();
     var list = await result.GetContactsAsync();
     foreach (var item in list)
     {
         var properties = await item.GetPropertiesAsync();
         System.Diagnostics.Debug.WriteLine(item.DisplayName);                
         System.Diagnostics.Debug.WriteLine(properties[KnownContactProperties.MobileTelephone].ToString());
     }
 }

哦,谢谢你的尝试。不幸的是,我需要做的相反:能够写入Windows.ApplicationModel.Contacts,或者至少找到一种写入该联系人.Phones属性的方法。原因是(据我所知)是WhatsApp正在查找的地方,我希望WhatsApp能够检测到我的应用程序创建的联系人... - Benjol
你有没有查看过这个官方示例:https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/ContactCardIntegration。这个示例包含了关于写入联系人到 windows.ApplicationModel.Contacts 的代码,你在使用时遇到了什么问题吗?它使用的是 contactphone class - Sunteen Wu
其实我可能误解了你的意思。你使用了来自Windows.Phone.PhoneContractKnwonContactProperties.MobileTelephone属性来设置电话属性。但现在你说你想用windows.ApplicationModel.Contacts来设置电话属性。你测试过我的代码了吗?这段代码列出了应用程序创建的联系人。 - Sunteen Wu
我的应用程序(从8.1开始)目前使用Windows.Phone进行编写,联系人和号码在People中显示正常。但是WhatsApp出于某种原因无法“看到”电话号码。我直接在People中创建了一个联系人,WhatsApp可以看到该号码。随后,使用Windows.ApplicationModel.Contacts,我发现该号码在联系人上可见。因此,我认为那就是WhatsApp正在查找的地方,所以我想在那里编写。我看到了您的链接,但它仅适用于Win 10,我希望这仅适用于构建,并且不意味着它不能在8.1上运行... - Benjol
为什么你说WhatsApp因某种原因无法“看到”电话号码?在我的代码中,我将电话号码结果打印在控制台中。我的代码示例可以在8.1和10上运行。 - Sunteen Wu
显示剩余2条评论

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