今天給大家介紹下Windows Phone 8 的 people hub - 人脈相關的API,了解Windows phone的同學一定都知道在windows phone7的API對通訊錄的操作權限是只讀的 不能直接向通訊錄中添加聯系人 只能通過其他方式同步聯系人 例如:exchange, save deloge,這樣對一些通訊錄的應用帶來了很多用戶體驗上制約,不過在microsoft最新的Windows phone 8 SDK中打開的這一限制,支持API級別的通訊錄增刪改查,下面我就給大家介紹一下。
升級到WP8必需知道的13個特性 系列文章目錄地址:http://www.linuxidc.com/Linux/2013-08/89003.htm
當然在寫代碼之前不要忘記設置WMAppManifest文件
1. 通訊錄中添加聯系人
首先給大家介紹的是如何創建一個聯系人至聯系人列表,在SDK 8.0 中的 ContactStore 他用於聯系人操作
ContactStore store = await ContactStore.CreateOrOpenAsync( ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly);
可以看到CreateOrOpenAsync方法中有兩個參數 分別是 ContactStoreSystemAccessMode 和 ContactStoreApplicationAccessMode 兩個枚舉值 這兩個枚舉值比較關鍵 前者是聲明當前應用所創建的聯系人十分可以在People hub中編輯改寫,後者是聲明在其他應用程序中的現實訪問權限.
ReadOnly 在people hub中對於系統用戶來說是只讀的 ReadWrite 顧名思義就是可讀寫的。
LimitedReadOnly 對於其他應用程序來說能看到的信息只是描述信息和現實圖片 ReadOnly則是可以讀取全部信息的。
添加一個聯系人的代碼十分簡單
async public void AddContact() { ContactStore store = await ContactStore.CreateOrOpenAsync( ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); StoredContact contact = new StoredContact(store); //contact.RemoteId = "123"; //contact.Id 只讀屬性添加成功後系統會自動分配 contact.GivenName = txtGivenName.Text; contact.FamilyName = txtFamilyName.Text; IDictionary<string, object> props = await contact.GetPropertiesAsync(); props.Add(KnownContactProperties.Email, txtMail.Text); props.Add(KnownContactProperties.Telephone, txtPhone.Text); await contact.SaveAsync(); MessageBox.Show("save done"); }
這裡給大家提一下RemoteId 是一個識別聯系人的標示 可以是GUID進行同步修改的時候可以為mapping service上的數據所用,在應用中也支持RemoteId的查找聯系人。
2. 修改聯系人
async private void UpdateContact(string remoteId, string givenName, string familyName, string email, string codeName) { ContactStore store = await ContactStore.CreateOrOpenAsync(); StoredContact contact = await store.FindContactByRemoteIdAsync(remoteId); if (contact != null) { contact.GivenName = givenName; contact.FamilyName = familyName; IDictionary<string, object> props = await contact.GetPropertiesAsync(); props[KnownContactProperties.Email] = email; IDictionary<string, object> extprops = await contact.GetExtendedPropertiesAsync(); extprops["Codename"] = codeName; await contact.SaveAsync(); } }
修改聯系人的過程和創建十分相似 區別就是可以通過一個RemoteId 或者 ID 獲取到目標聯系人對要修改的字段進行修改保存。
3. 刪除聯系人
ContactQueryResult result = store.CreateContactQuery(); IReadOnlyList<StoredContact> contacts = await result.GetContactsAsync(); List<StoredContact> listSC = contacts.ToList(); await store.DeleteContactAsync(listSC[0].Id);
刪除聯系人更為簡單 只需要StoredContact的ID就可以進行刪除操作。
從 Windows Phone7 到 Windows Phone 8 更新 如何設配兩個版本
Windows Phone 8 與 Windows 8 開發技術概覽
Windows Phone 8 人脈 people hub 通訊錄管理
Windows Phone & Windows 8 Push Notification from Windows Azure
在Windows Phone Store 商店中提交你的 Windows Phone 8 應用
Windows Phone 8 語音 - Speech for Windows Phone 8