今天給大家介紹下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