2015-10-16 44 views
1

是否有可能以编程方式将联系人添加到Windows 10中的地址簿/人应用程序,就像在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; 
       }); 
      }); 

但我发现了一个ACCES否认错误。

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

回答

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', '[email protected]').done(function() { 
      console.log("add contact successfully"); 
     }); 
    }); 
0

试试这个

contacts.ContactManager.requestStoreAsync(ContactStoreAccessType.AppContactsReadWrite); 

,而不是这个

contacts.ContactManager.requestStoreAsync() 

你打开默认存储,我认为它不能被开发人员访问。

+0

其他答案包含类似的东西。有区别吗?如果没有,为什么你觉得有必要发布另一个答案? –

+0

是的你是对的 –

相关问题