ContactManager.RequestStoreAsync() throws System.Unauthorize

本文关键字:System Unauthorize throws RequestStoreAsync ContactManager | 更新日期: 2023-09-27 18:05:32

我试图在Windows 10通用应用程序API中使用ContactManager类。我正在尝试在Windows 10台式机上执行此操作。

我收到一个异常,"System. "UnauthorizedAccessException"当尝试使用ContactManager.RequestStoreAsync()请求联系人列表时。

在以前的版本中,此功能仅适用于Windows Phone设备。微软的文档只是说它现在需要Windows 10设备系列,但我没有任何运气。

using Windows.ApplicationModel.Contacts;
public async Task<List<String>> getContacts()
    {
        List<String> listResults = new List<string>();
        ContactStore store = null;
        IReadOnlyList<ContactList> list = null;
        ContactReader reader = null;
        ContactBatch batch = null;
        // *** This RequestStoreAsync() call is where the exception is thrown. All the cases below have the same issue. ***
        //store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadWrite);
        //store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
        store = await ContactManager.RequestStoreAsync();
        list = await store.FindContactListsAsync();
        foreach (ContactList contactList in list)
        {
            reader = contactList.GetContactReader();
            batch = await reader.ReadBatchAsync();
            foreach (Contact contact in batch.Contacts)
            {
                listResults.Add(contact.Name);
            }
        }

        return listResults;
    }

ContactManager.RequestStoreAsync() throws System.Unauthorize

好吧,我想我自己找到了答案。如果您将"联系人"功能添加到包中。Appxmanifest文件,它会解决这个问题。

此功能没有UI选项。你必须知道它的存在,在文本编辑器中编辑文件,而不是在UI中,并添加:

<uap:Capability Name="contacts" />

截至2018年,在可视化编辑包时,在Capabilities选项卡上列出了这样的功能。appxmanifest,至少在VS2017中。总之,

<uap:Capability Name="contacts" />