2014-05-07 141 views
1

我只是想用下面的代碼創建簡單的聯繫人。沒有編譯問題,我可以看到在輸出窗口中創建的聯繫人,但由於某些原因未在手機上的聯繫人存儲中創建聯繫人。我在這裏錯過了什麼嗎?聯繫人創建問題

這是從那裏我得到了remoteHelper類the link

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Navigation; 
using Microsoft.Phone.Controls; 
using Microsoft.Phone.Shell; 
using EmulateContacts.Resources; 
using System.IO; 
using Windows.Phone.PersonalInformation; 
using System.Xml.Linq; 
using System.Diagnostics; 
using System.Threading.Tasks; 
using Windows.Storage.Streams; 

namespace EmulateContacts 
{ 

    public class RemoteContact 
    { 
     public string RemoteId { get; set; } 
     public string GivenName { get; set; } 
     public string FamilyName { get; set; } 
     public string DisplayName { get; set; } 
     public string Email { get; set; } 
     public string CodeName { get; set; } 
     public Stream photo { get; set; } 

     public override string ToString() 
     { 
      return String.Format(" {0}\n {1}\n {2}\n {3}\n {4}\n {5}", RemoteId, GivenName, FamilyName, DisplayName, Email, CodeName); 
     } 
    } 

    public partial class MainPage : PhoneApplicationPage 
    { 
     ContactStore contactStore; 
     RemoteIdHelper remoteIdHelper; 

     public MainPage() 
     { 
      InitializeComponent(); 
     } 

     private void btnAddContacts_Click(object sender, RoutedEventArgs e) 
     { 
      StatusTextBlock.Text = "Importing contacts..."; 

      CreateContacts(); 

      StatusTextBlock.Text = "Done."; 
     } 

     private async void CreateContacts() 
     { 

      try 
      { 
       contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); 

       remoteIdHelper = new RemoteIdHelper(); 

       await remoteIdHelper.SetRemoteIdGuid(contactStore); 

       int remoteId = 0; 
       int DN = 0; 
       int mail = 0; 
       int n; 
       n = 10; 

       for (int i = 0; i < n; i++) 
       { 
        Stream myStream = App.GetResourceStream(new Uri(@"Sample.jpg", UriKind.RelativeOrAbsolute)).Stream; 
        var remoteContact = new RemoteContact 
        { 
         RemoteId = remoteId.ToString(), 
         GivenName = "S", 
         FamilyName = "BCB", 
         DisplayName = "CR" + DN, 
         Email = "Sync" + mail + "@gmail.com", 
         CodeName = "R", 
         photo = myStream, 

        }; 
        remoteId++; DN++; mail++; 

        await AddContact(remoteContact); 
       } 
     } 
      catch(Exception e) 
      { 
       Debug.WriteLine(e.Message); 
      } 
     } 

     public async Task AddContact(RemoteContact remoteContact) 
     { 
      // Create a new StoredContact object 
      StoredContact contact = new StoredContact(contactStore); 

      // Make sure the remote contact has a RemoteId value 
      if (remoteContact.RemoteId == null) 
      { 
       return; 
      } 

      // Use the RemoteIdHelper class to add a GUID to the remote ID to make sure 
      // the value is unique to this app 
      contact.RemoteId = await remoteIdHelper.GetTaggedRemoteId(contactStore, remoteContact.RemoteId); 

      // Set the properties that are exposed directly by the StoredContact class 
      if (remoteContact.GivenName != null) contact.GivenName = remoteContact.GivenName; 
      if (remoteContact.FamilyName != null) contact.FamilyName = remoteContact.FamilyName; 

      // If you don't supply a display name, "[GivenName] [FamilyName]" will be used, but it won't 
      // automatically be updated when you update GivenName or FamilyName. 
      if (remoteContact.DisplayName != null) contact.DisplayName = remoteContact.DisplayName; 

      IInputStream I = remoteContact.photo.AsInputStream(); 
      await contact.SetDisplayPictureAsync(I); 


      // Call GetPropertiesAsync to get the dictionary of properties that are understood by the phone. 
      // The keys for this dictionary must be values from the KnownContactProperies enumeration. 
      IDictionary<string, object> props = await contact.GetPropertiesAsync(); 
      if (remoteContact.Email != null) props.Add(KnownContactProperties.Email, remoteContact.Email); 

      // Call GetPropertiesAsync to get the dictionary of properties that are specific to your app. 
      // In this case, the app will set a CodeName property. 
      IDictionary<string, object> extprops = await contact.GetExtendedPropertiesAsync(); 
      if (remoteContact.CodeName != null) extprops.Add("CodeName", remoteContact.CodeName); 

      try 
      { 
       // Call SaveAsync to save the contact into the store. 
       await contact.SaveAsync(); 
       Debug.WriteLine(String.Format("Adding:\n{0}", remoteContact.ToString())); 
      } 
      catch (Exception) 
      { 
       Debug.WriteLine(String.Format("Unable to add contact: {0}", remoteContact.ToString())); 
      } 
     } 

    } 

} 

回答

0

可能會創建您的聯繫方式,但不可見的,因爲在Windows Phone 8.1引入了8.0顯著的變化 - 從第三方應用程序的聯繫人沒有默認顯示。進入人物應用程序,在第一頁(聯繫人)頂部,您將顯示「顯示所有」/「顯示一些帳戶」。點按即可管理特定應用的聯繫人的可見性。

+0

終於找到了問題...這是因爲我沒有爲每個創建的聯繫人添加號碼,並且在聯繫人下有一個選項可隱藏/顯示沒有號碼的聯繫人。 – golldy