Windows Phone 8 新增功能:支援第三方應用建立自定義聯絡人Custom Contact Store。

l_serein發表於2013-03-27

Windows Phone 8 將允許開發人員建立自己的Custom Contact Store。應用程式通過應用程式新增新聯絡人後,先聯絡人出現在Windows Phone hub中,並和使用者的系統聯絡人並存。開發人員可以為建立聯絡人的的標準屬性,如電話號碼、名稱等,也可以儲存自定義屬性。開發人員還可以利用聯絡人儲存api來同步他們的使用者的聯絡人列表到雲端。

建立聯絡人:

[csharp] view plaincopy
  1. private async void Button_Click_4(object sender, RoutedEventArgs e)  
  2. {  
  3.     //var store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadOnly,  
  4.     //    ContactStoreApplicationAccessMode.LimitedReadOnly);  
  5.   
  6.   
  7.     //連結並開啟聯絡人, 需要新增<Capability Name="ID_CAP_CONTACTS" /> 能力  
  8.     var store = await ContactStore.CreateOrOpenAsync();  
  9.     Debug.WriteLine("RevisionNumber:" + store.RevisionNumber);  
  10.   
  11.     StoredContact sc = new StoredContact(store);  
  12.     sc.DisplayName = "Mark";  
  13.     sc.HonorificPrefix = "et";  
  14.     await sc.SaveAsync();  
  15. }  

讀取聯絡人

[csharp] view plaincopy
  1. private async void Button_Click_2(object sender, RoutedEventArgs e)  
  2. {  
  3.   
  4.     //var store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadOnly,  
  5.     //    ContactStoreApplicationAccessMode.LimitedReadOnly);  
  6.       
  7.   
  8.     //連結並開啟聯絡人, 需要新增<Capability Name="ID_CAP_CONTACTS" /> 能力  
  9.     var store = await ContactStore.CreateOrOpenAsync();  
  10.     Debug.WriteLine("RevisionNumber:" + store.RevisionNumber);  
  11.   
  12.     //建立聯絡人查詢  
  13.     ContactQueryResult result = store.CreateContactQuery();  
  14.     var count = await result.GetContactCountAsync();  
  15.     Debug.WriteLine("GetContactCountAsync:" + count);  
  16.   
  17.     ContactQueryOptions option = result.GetCurrentQueryOptions();  
  18.     foreach (string filed in option.DesiredFields)  
  19.     {  
  20.         Debug.WriteLine("filed:" + filed);  
  21.     }  
  22.       
  23.   
  24.     //獲取聯絡人列表  
  25.     var contacts = await result.GetContactsAsync();  
  26.     foreach (StoredContact contact in contacts)  
  27.     {  
  28.         Debug.WriteLine("DisplayName:" + contact.DisplayName);  
  29.         //將聯絡人資料轉換成VCard檔案  
  30.         var vCard = await contact.ToVcardAsync();  
  31.         IInputStream inputStream = vCard.GetInputStreamAt(0);  
  32.         ulong length = vCard.Size;  
  33.   
  34.         try  
  35.         {  
  36.             //將vCard檔案流使用字串輸出  
  37.             var readBuf = new Windows.Storage.Streams.Buffer((uint)length);  
  38.             var vCardOp = vCard.GetInputStreamAt(0).ReadAsync(readBuf, (uint)length, InputStreamOptions.Partial);  
  39.             vCardOp.Completed = (IAsyncOperationWithProgress<IBuffer, uint> asyncAction, AsyncStatus asyncStatus) =>  
  40.             {  
  41.                 switch (asyncStatus)  
  42.                 {  
  43.                     case AsyncStatus.Completed:  
  44.                         Debug.WriteLine("vCardString:" + MainPage.BufferToString(readBuf));  
  45.                         break;  
  46.                     case AsyncStatus.Error:  
  47.                         break;  
  48.                     case AsyncStatus.Canceled:  
  49.                         // Read is not cancelled in this sample.  
  50.                         break;  
  51.                 }  
  52.             };  
  53.   
  54.         }  
  55.         catch (Exception exp)  
  56.         {  
  57.             Debug.WriteLine(exp.ToString());  
  58.         }  
  59.   
  60.     }  
  61. }  

相關文章