联系人选择器在Windows Phone 8.1 Silverlight中无法正常工作。

5
"I've tried to get contact info in Windows Phone 8.1 SL app by following Quickstart: Selecting user contacts."
"In my function,"
    private async void PickAContactButton_Click(object sender, RoutedEventArgs e)
    {
        var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
        contactPicker.desiredFieldsWithContactFieldType.add(Windows.ApplicationModel.Contacts.ContactFieldType.email);
        Contact contact = await contactPicker.PickContactAsync(); // this throws System.NotImplementedException
        // Additional information: The method or operation is not implemented.

        if (contact != null)
        { ... }
     }

同样的功能在Windows Phone 8.1 RT中也可以使用。根据this referenceContactPicker类在WP 8.1 RT和WP 8.1 SL中都得到支持。

有任何想法吗?


我现在已经遇到了同样的问题几个小时了... 这个话题有任何更新吗? - timtos
对于 var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();IList<Contact> contacts = await contactPicker.PickContactsAsync();,我收到了 System.IO.FileNotFoundException 的错误。 - Mangesh
遇到了同样的问题。这似乎只是框架的问题。请在此处查看 https://social.msdn.microsoft.com/Forums/windowsapps/en-US/8b8ab8a9-189a-40e0-8490-36a892118ee2/contactpicker-problem-in-windows-phone-81-silverlight?forum=wpdevelop - Mangesh
这是一个 bug,我打算进行报告。 - Matt Small
哦,好吧,我现在正在经历这种行为,而原始问题发布已经有一段时间了。:( - Michael Antipin
1个回答

1

今天在我的Windows 8.1通用商店应用程序中出现了这种行为,因此也许这可以帮助你。我遇到了不同的异常(FileNotFoundException和纯System.Exception),因此我并不确定这是否是相同的问题。

据我的实验表明,目前需要以下步骤才能使ContactPicker正常工作:

  • ContactPicker实例必须在UI线程中创建
  • contactPicker.DesiredFieldsWithContactFieldType必须只有一项(0或>1项将引发异常)

以下是我最终采取的做法:

// using Windows.ApplicationModel.Core;

// in an async method:
Contact user = null;
AutoResetEvent resetEvent = new AutoResetEvent(false);
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
    CoreDispatcherPriority.Normal, 
    (async ()=>{
      ContactPicker contactPicker = new ContactPicker();
      contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
      user = await contactPicker.PickContactAsync();
      resetEvent.Set();
    }
);
resetEvent.WaitOne();
if (user != null) {
    // do smth
}

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