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

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.