Curso Windows Phone – Como obter informações da sua lista de contatos armazenada no WP

Olá pessoal, tudo bom?

Segue um exemplo sobre como obter informações da sua lista de contatos armazenada no Windows Phone.

A primeira coisa a fazer é implementar uma classe para representar quais informações sobre os contatos você deseja obter, exibir e/ou manipular. No caso, criei uma classe chamada Contato.cs com a seguinte estrutura:


using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.UserData;

namespace Exemplo
{
  public class Contato
  {
    public object Foto { get; set; }
    public string Nome { get; set; }
    public string Telefone { get; set; }
    public string TelefoneCorrigido { get; set; }
  }
}

Em seguida, prepare a interface da APP, que para o exemplo, imaginei um listbox exibindo a foto, o nome da pessoa e o número do telefone celular dos contatos registrados atualmente no Windows Phone. Veja o exemplo:

...
<!--LayoutRoot is the root grid where all page content is placed-->
 <Grid x:Name="LayoutRoot">
   <Grid.Background>
     <ImageBrush ImageSource="Imagens/background-page.jpg" Stretch="UniformToFill" />
   </Grid.Background>
   <Grid.RowDefinitions>
     <RowDefinition Height="Auto"/>
     <RowDefinition Height="*"/>
   </Grid.RowDefinitions>

<!--TitlePanel contains the name of the application and page title-->
 <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
   <TextBlock x:Name="ApplicationTitle" Text="EXEMPLO" Style="{StaticResource PhoneTextNormalStyle}" Foreground="Yellow" FontWeight="Bold" />
   <TextBlock x:Name="PageTitle" Text="contatos" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" Foreground="Cyan" />
 </StackPanel>

<!--ContentPanel - place additional content here-->
 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
   <TextBlock Name="txbAguarde" Text="Carregando a lista de contatos..."
              Foreground="White"
              HorizontalAlignment="Center" />
   <toolkit:PerformanceProgressBar Name="ppbAguarde"
              VerticalAlignment="Top"
              Margin="0,35,0,0"
              IsIndeterminate="true" />
   <ListBox Name="lstContatos">
     <ListBox.ItemTemplate>
       <DataTemplate>
         <StackPanel Orientation="Vertical">
           <StackPanel Orientation="Horizontal">
             <Image Width="45" VerticalAlignment="Center"
                Name="imgFoto"
                Source="{Binding Foto}" />
             <TextBlock Name="txtNome" Height="Auto"
                FontSize="28" Foreground="White"
                VerticalAlignment="Center"
                Margin="4,0,0,0"
                Text="{Binding Nome}" />
           </StackPanel>
           <TextBlock Name="txtTelefone" Height="Auto"
              Margin="48,0,0,0" HorizontalAlignment="Left"
              FontSize="22" Foreground="DarkOrange"
              FontWeight="Bold"
              Width="Auto" Text="{Binding Telefone}"/>
         </StackPanel>
       </DataTemplate>
     </ListBox.ItemTemplate>
   </ListBox>
 </Grid>
</Grid>
...

E para concluir, vamos verificar qual a implementação necessária na classe em C# para que os dados possam ser bindados no listbox demonstrado acima.

...
using Microsoft.Phone.Controls;
using Microsoft.Phone.Tasks;
using Microsoft.Phone.UserData;
using System.Text.RegularExpressions;
using System.Windows.Media.Imaging;
using System.IO;
using System.Windows.Resources;

namespace Exemplo
{
  public partial class MainPage : PhoneApplicationPage
  {
    // Constructor
    public MainPage()
    {
      InitializeComponent();
      ListarContatos();
    }

    public void ListarContatos()
    {
      Contacts c = new Contacts();
      c.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(c_SearchCompleted);
      c.SearchAsync(string.Empty, FilterKind.None, null);
    }

    void c_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {
      //Trazendo apenas os contatos com números de telefone celular que contenham 8 números ou mais.
      var dados = from c in e.Results
          where c.PhoneNumbers.Count() > 0 &&
          c.PhoneNumbers.Where(x => x.Kind == PhoneNumberKind.Mobile).FirstOrDefault() != null &&
          c.PhoneNumbers.Where(x => x.Kind == PhoneNumberKind.Mobile).FirstOrDefault().PhoneNumber.Length >= 8
          select new Contato
                    {
                      Foto = ObterFoto(c.GetPicture()),
                      Nome = c.DisplayName,
                      Telefone = c.PhoneNumbers.Where(x=>x.Kind == PhoneNumberKind.Mobile).FirstOrDefault().PhoneNumber,
                    };
      lstContatos.ItemsSource = dados;

      txbAguarde.Visibility = System.Windows.Visibility.Collapsed;
      ppbAguarde.IsIndeterminate = false;
   }

   public object ObterFoto(Stream img)
   {
     if (img != null)
        return Microsoft.Phone.PictureDecoder.DecodeJpeg(img);
     else
     {
        //Obtendo uma imagem padrão quando o contato não tem foto.
        Uri uri = new Uri("Imagens/rosto.jpg", UriKind.Relative);
        StreamResourceInfo sri = Application.GetResourceStream(uri);
        return Microsoft.Phone.PictureDecoder.DecodeJpeg(sri.Stream);
     }
   }
  }
}
...
Exemplo em funcionamento no WP

Exemplo em funcionamento no WP

 

Espero que tenham gostado.

Grande abraço,
Eduardo Henrique Rizo

Post relacionado:

Curso Windows Phone Gratuíto – Vários tópicos

Anúncios

Coordenador de Internet da Universidade do Oeste Paulista (Unoeste) e professor universitário de disciplinas relacionadas ao desenvolvimento de sistemas para Web, gerenciamento de servidores, serviços e redes.

Marcado com: , , , , , , , ,
Publicado em Windows Phone
2 comentários em “Curso Windows Phone – Como obter informações da sua lista de contatos armazenada no WP
  1. […] Como obter informações da sua de contatos armazenada no WP […]

  2. […] Curso Windows Phone – Como obter informações da sua lista de contatos armazenada no WP […]

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Sorocaba e Região
Prestadora de serviços RIZZO GS - Sorocaba/SP

Serviços de limpeza, conservação, recepção, copa, portaria, vigia, zeladoria, jardim, elétrica, hidráulica, pintura, etc.

Contato: (15) 3357-4263 / (15) 3357-4502 - contato@rizzogs.com.br

Website: http://www.rizzogs.com.br

%d blogueiros gostam disto: