Click here to Skip to main content
Click here to Skip to main content

How to Retrieve Email Address in WP7 using the EmailAddressChooserTask?

By , 21 Apr 2012
Rate this:
Please Sign up or sign in to vote.

In last two blog posts we learnt how to save email address in WP7 and how to send email. We also learnt the internal implementation of the APIs used by the Windows Phone 7 SDK.

Today in this blog post we will explore how to retrieve email address from contact list with a simple example (including the internal implementation of the API). Don’t forget to provide your feedback. If you have any queries, let me know. I will try to answer you as early as I can.

Related Posts

Know About the API

EmailAddressChooserTask is a sealed class present in the Microsoft.Phone.Tasks namespace and derives from ChooserBase of type EmailResult. It contains only a single method named Show() when called opens the Email Chooser UI in the screen.

It allows an application to launch the Contacts application. Use this to obtain the email address of a contact selected by the user.

Here is the meta data of the EmailAddressChooserTask class:

namespace Microsoft.Phone.Tasks
{
    public sealed class EmailAddressChooserTask : ChooserBase<EmailResult>
    {
        public override void Show();
    }
}

If we explore the decompiled version of the class, we will see the actual implementation of the SDK API. Here is the original implementation of the class:

namespace Microsoft.Phone.Tasks
{
  public sealed class EmailAddressChooserTask : ChooserBase<EmailResult>
  {
    private const int StaticFilterHasEmail = 8;
    private const string AppUri = 
            "app://5B04B775-356B-4AA0-AAF8-6491FFEA5615/ChoosePropertyOfExistingPerson";

    public override void Show()
    {
      if (!ChooserHelper.NavigationInProgressGuard((Action) (() => this.Show())))
        return;
      byte[] buffer = ChooserHelper.Serialize(this.BuildParameterPropertyBag());
      Uri appUri = new Uri(this.BuildUri(), UriKind.Absolute);
      base.Show();
      ChooserHelper.Invoke(appUri, buffer, (IChooser) this._genericChooser);
    }

    internal override string BuildUri()
    {
      return "app://5B04B775-356B-4AA0-AAF8-6491FFEA5615/ChoosePropertyOfExistingPerson";
    }

    internal override ParameterPropertyBag BuildParameterPropertyBag()
    {
      ParameterPropertyBag parameterPropertyBag = new ParameterPropertyBag();
      parameterPropertyBag.CreateProperty("RestrictionType").Int32Value = 8;
      return parameterPropertyBag;
    }

    internal override void OnInvokeReturned(byte[] outputBuffer, Delegate fireThisHandlerOnly)
    {
      bool flag = false;
      if (outputBuffer.Length > 0)
      {
        ParameterPropertyBag parameterPropertyBag = new ParameterPropertyBag(outputBuffer, 
                                                                 (uint) outputBuffer.Length);
        ParameterProperty property1 = parameterPropertyBag.GetProperty("PickerPropertyValue");
        if (property1.ValueType == ParameterPropertyValueType.ValueType_String && 
                                             !string.IsNullOrEmpty(property1.StringValue))
        {
          flag = true;
          EmailResult e = new EmailResult(TaskResult.OK);
          e.Email = property1.StringValue;
          ParameterProperty property2 = parameterPropertyBag.GetProperty("OutDisplayName");
          if (property2.ValueType == ParameterPropertyValueType.ValueType_String)
            e.DisplayName = property2.StringValue;
          this.FireCompleted((object) this, e, fireThisHandlerOnly);
        }
      }
      if (flag)
        return;
      this.FireCompleted((object) this, new EmailResult(TaskResult.Cancel), 

                                                                   fireThisHandlerOnly);

    }
  }
}

Once you go through the decompiled version of the class from the above code snippet, you will understand the code implementation easily.

Implementation Steps

To integrate this in your application, first of all you need to create the instance of the EmailAddressChooserTask and register for the Completed event (if you want to handle the task result). Call the Show() method to launch the chooser screen.

Here is the code snippet:

var emailAddressChooserTask = new EmailAddressChooserTask();
emailAddressChooserTask.Completed += EmailAddressChooserTaskCompleted;
emailAddressChooserTask.Show();

Here is the completed event, where you can handle the result easily. The “EmailResult” returns the contact display name and email address. Based on the TaskResult, take care of user interaction.

void EmailAddressChooserTaskCompleted(object sender, EmailResult e)
{
    switch (e.TaskResult)
    {
        case TaskResult.OK:
            // On Success
            MessageBox.Show(e.DisplayName + ": " + e.Email);
            break;

        case TaskResult.Cancel:
            // Interrupted by the user

            break;

        default:
            break;
    }
}

Here is the screenshot of what you will actually see once you run the above code. When you call the Show() method, this will popup the contact list. When you click on the contact, it will come to the completed event and as per our implementation, it will show the name and email address of the specified contact.

Screenshot 1: How to Retrieve Email Address in WP7 using the EmailAddressChooserTask?     Screenshot 2: How to Retrieve Email Address in WP7 using the EmailAddressChooserTask?

I hope that this post was very useful for you to understand the SDK API, it’s internal code implementation and the sample code implementation. Please leave your feedback below to leave your comment.

Stay tuned to my blog, Twitter, or Facebook to read more articles, tutorials, news, tips & tricks on various technology fields. Also Subscribe to our Newsletter with your Email ID to keep you updated on latest posts. We will send newsletter to your registered email address. We will not share your email address to anybody as we respect privacy.

Reference: http://www.kunal-chowdhury.com. You may like to follow me on Twitter @kunal2383 or may like the Facebook page of my blog http://www.facebook.com/blog.kunal2383.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

_ Kunal Chowdhury _
Technical Lead
India India
Kunal Chowdhury is a Microsoft "Client Development" MVP (Most Valuable Professional), a Codeproject Mentor, Telerik MVP, Nokia Developer Champion, Speaker in various Microsoft events, Author, passionate Blogger and a Software Engineer by profession.
 
He is currently working in an MNC located in India. He has a very good skill over XAML, C#, Silverlight, Windows Phone, WPF and Windows 8 (WinRT). He posts his findings, articles in his technical blog and CodeProject.
 
Technical Blog: http://www.kunal-chowdhury.com
Facebook: http://facebook.com/blog.kunal
Twitter : http://twitter.com/kunal2383
Follow on   Twitter   Google+   LinkedIn

Comments and Discussions

 
QuestionWP7 PinmemberManov rao24-Apr-12 19:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web03 | 2.8.140415.2 | Last Updated 22 Apr 2012
Article Copyright 2012 by _ Kunal Chowdhury _
Everything else Copyright © CodeProject, 1999-2014
Terms of Use
Layout: fixed | fluid