添加联系人Windows 10 Universal

时间:2015-10-16 14:23:13

标签: javascript windows contacts uwp

是否可以通过编程方式将联系人添加到Windows 10中的地址簿/人物应用中,就像在Android中一样?

我有一个存储联系信息的服务器,我想创建一个应用程序来将我的联系人与Windows 10同步。

我尝试了几件事,但事实并非如此。这就是我走了多远:

  1. 成功下载联系人数据。
  2. 将联系人数据放入Contact对象。
  3. 这是我尝试过的:

                    contacts.ContactManager.requestStoreAsync().done(function (contactStore) {
                    contactStore.createContactListAsync("name").done(function (contactList) {
                        for (i = 0; i < data.length; i++) {
                            var contact = new contacts.Contact;
                            //populate Contact item
                            contactList.saveContactAsync(contact);
                        }
                        contactList.saveAsync;
                    });
                });
    

    但我收到 access denied 错误。

    任何帮助将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:2)

首先,确保您已在应用清单中添加了联系人功能。

  <Capabilities>
    <Capability Name="internetClient" />
    <uap:Capability Name="contacts"/>
  </Capabilities>

如果您没有请求对联系人存储区的读/写权限,您也会收到拒绝访问错误。

ContactStoreAccessType enumeration

在这种情况下,您可以请求“appContactsReadWrite”权限。

但是在我测试时,调用createContactListAsync方法时会出现一些API问题。

目前的解决方法是添加Windows运行时组件包装器:

public sealed class ContactManagerWrapper
{
    public IAsyncAction AddContactAsync(string userName, string email)
    {
        return AsyncInfo.Run(async (token) =>
        {
            var store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

            var contactLists = await store.FindContactListsAsync();

            var contactList = contactLists.FirstOrDefault();

            var contact = new Contact();

            contact.Name = userName;

            contact.Emails.Add(new ContactEmail() { Address = email, Kind = ContactEmailKind.Personal });

            await contactList.SaveContactAsync(contact);
        });
    }
}

WinJS项目:

    document.getElementById('click_me').addEventListener("click", function () {
        var mgr = new UWPRuntimeComponent.ContactManagerWrapper();

        mgr.addContactAsync('Jeffrey', 'jeffrey.chen@example.com').done(function () {
            console.log("add contact successfully");
        });
    });

答案 1 :(得分:0)

试试这个

contacts.ContactManager.requestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);

而不是

contacts.ContactManager.requestStoreAsync()

您打开默认商店,我认为开发商无法访问它。