在Windows Phone 8.1通用应用中访问联系人信息

3
我正在根据我在MSDN中阅读的链接使用以下代码。
 public async void getFavouriteList()
    {
        try
        {
            ContactStore store = await ContactStore.CreateOrOpenAsync();


            var queryOptions = new ContactQueryOptions();
            queryOptions.DesiredFields.Add(KnownContactProperties.DisplayName);

            ContactQueryResult result = store.CreateContactQuery(queryOptions);

            var contactCount = await result.GetContactCountAsync();
            var contacts = await result.GetContactsAsync(0, contactCount);

            //IReadOnlyList<StoredContact> contacts = await result.GetContactsAsync();

            foreach (StoredContact item in contacts)
            {
                // I am not getting any contacts so this debug line is not printed !!!
                Debug.WriteLine("this is not printed");

                Debug.WriteLine(item.DisplayName + ":" + item.RemoteId);
            }
        }
        catch(Exception e)
        {
            Debug.WriteLine("this is not printed 7");
            Debug.WriteLine(e.Message);
        }
    }

请指出我的代码中的问题。
需要注意的事项: 我正在使用 Windows 8.1 通用应用程序模板。 我也已将联系人和约会添加到了我的应用程序功能中。
在我看来一切看起来都很完美...如果我漏掉了什么,请帮忙指出!

有人在通用应用程序中尝试过联系人访问吗?我是否遗漏了什么?请帮帮我。 - user990967
2个回答

1
我认为你编写的代码只拉取了与你的应用程序相关的联系人。
如果你想获取设备上的所有联系人,你可能需要像这样做:
using Windows.ApplicationModel.Contacts;

var contactStore = await ContactManager.RequestStoreAsync();
var contacts = await contactStore.FindContactsAsync();

foreach (var contact in contacts) 
{
    // do whatever you want here
}

我的Windows Phone Silverlight应用程序会抛出“访问被拒绝”的异常。 - Mangesh
1
我认为这是针对通用应用而不是Silverlight应用的。您可以尝试在清单文件中声明功能以实现相同的效果 - http://stackoverflow.com/questions/23367555/access-denied-exception-when-calling-windows-phone-8-1-contactmanager-requeststo - Milan Aggarwal

1

是的,你肯定可以做到。

private async void Button_Click(object sender, RoutedEventArgs e)
{
    var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
    picker.DesiredFieldsWithContactFieldType.Add(Windows.ApplicationModel.Contacts.ContactFieldType.Email);
    var contact = await picker.PickContactAsync();

    if (contact == null)
        return;

#if WINDOWS_APP
    var button = sender as Button;
    var visual = button.TransformToVisual(null);
    var point = visual.TransformPoint(new Windows.Foundation.Point());
    var rect = new Windows.Foundation.Rect(point, button.RenderSize);
    Windows.ApplicationModel.Contacts.ContactManager.ShowContactCard(contact, rect);
#elif WINDOWS_PHONE_APP
    var dialog = new Windows.UI.Popups.MessageDialog(contact.DisplayName);
    await dialog.ShowAsync();
#endif
}

祝你好运!


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