[Desenvolvimento] Como obter informações da sua lista de contatos armazenada no WP

0

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
...
<!--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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
...
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 (@eduardorizo)

Fonte: Blog do Eduardo H. Rizo

Post relacionado:

Curso Windows Phone Gratuito – Vários tópicos

Share.

About Author

Bacharel em Ciência da Computação pela FIPP/Unoeste, Pós-Graduado em Desenvolvimento de Sistemas Web, Segurança da Informação e Avaliação do Ensino e da Aprendizagem, Professor universitário e responsável pelo setor de desenvolvimento de sistemas web da Universidade do Oeste Paulista. MCP e MCPS pela Microsoft e nas horas vagas dedica um pouco do seu tempo escrevendo posts técnicos sobre desenvolvimento de sistemas web, windows phone, gerenciamento de servidores e outros assuntos para a comunidade.