سؤال

I am just trying to create simple contacts with the code below. There are no compilation issues, I can see the contacts being created in the output window but for some reason the contacts are not being created in the contact store on the phone. Am I missing something here ?

Here is the link from where I got the remoteHelper class,

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()));
            }
        }

    }

}
هل كانت مفيدة؟

المحلول

Your contact might be created but not visible, as the Windows Phone 8.1 introduces a significant change to 8.0 - the contacts from third-party applications are not shown by default. Go to People App, on the top of the first page (Contacts) you will have "showing all"/"showing some accounts". Tap that to manage visibility of contacts of specific apps.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top