Windows Phone 8 人脈 people hub 通訊錄管理


今天給大家介紹下Windows Phone 8 的 people hub - 人脈相關的API,了解Windows phone的同學一定都知道在windows phone7的API對通訊錄的操作權限是只讀的 不能直接向通訊錄中添加聯系人 只能通過其他方式同步聯系人 例如:exchange, save deloge,這樣對一些通訊錄的應用帶來了很多用戶體驗上制約,不過在microsoft最新的Windows phone 8 SDK中打開的這一限制,支持API級別的通訊錄增刪改查,下面我就給大家介紹一下。

當然在寫代碼之前不要忘記設置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就可以進行刪除操作。

4. 查詢聯系人

查詢聯系人仍然支持7.5的查詢方式(支持過濾條件支持linq)

private void ButtonContacts_Click(object sender, RoutedEventArgs e)
{
    Contacts cons = new Contacts();

    //Identify the method that runs after the asynchronous search completes.
    cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);

    //Start the asynchronous search.
    cons.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1");
}

void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
    //Do something with the results.
    MessageBox.Show(e.Results.Count().ToString());
}

通訊錄搜索:http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh286416(v=vs.105).aspx

過濾條件:http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh286417(v=vs.105).aspx

除此之外還支持使用

CreateContactQuery 獲取ContactStore聯系人列表 支持返回屬性設置和排序

        async private void QueryWithDesiredFields()
        {
            ContactStore store = await ContactStore.CreateOrOpenAsync();

            ContactQueryOptions options = new ContactQueryOptions();
            options.DesiredFields.Add(KnownContactProperties.Email);
            options.OrderBy = ContactQueryResultOrdering.FamilyNameGivenName;

            ContactQueryResult result = store.CreateContactQuery(options);
            IReadOnlyList<StoredContact> contacts = await result.GetContactsAsync();
        }

經過上述應用添加到people hub中的聯系人顯示也是可以篩選顯示的

進入 人脈 - 設置 - 篩選我的聯系人列表 - 選擇要顯示來自應用的聯系人即可

 

默認都是選中的

MSDN連接:http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207024(v=vs.105).aspx

歡迎大家在這里和我溝通交流或者在新浪微博上 @王博_Nick


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM