【问题标题】:Add contacts Windows 10 Universal添加联系人 Windows 10 Universal
【发布时间】:2016-01-15 08:16:30
【问题描述】:

是否可以像在 Android 中那样以编程方式将联系人添加到 Windows 10 中的地址簿/人员应用?

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

我尝试了几件事,但并没有真正奏效。这就是我已经走了多远:

  1. 已成功下载联系人数据。
  2. 将联系人数据放入Contact 对象中。

这是我尝试过的:

                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;
                });
            });

但我收到了一个访问被拒绝错误。

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

【问题讨论】:

    标签: javascript windows contacts uwp


    【解决方案1】:

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

      <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");
            });
        });
    

    【讨论】:

      【解决方案2】:

      试试这个

      contacts.ContactManager.requestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);
      

      而不是这个

      contacts.ContactManager.requestStoreAsync()
      

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

      【讨论】:

      • 另一个答案包含类似的内容。有区别吗?如果不是,您为什么觉得需要发布另一个答案?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      相关资源
      最近更新 更多