[Desenvolvimento] Como consultar compromissos na agenda do Windows Phone via C#

1

Calendar-DateOlá pessoal, tudo bom?

Segue uma dica rápida para que você possa, através de sua APP, consultar compromissos que estejam registrados na agenda do Windows Phone.

Para obter acesso aos agendamentos do usuário será necessário declarar o uso do namespace Microsoft.Phone.UserData, pois é através dele que passaremos a ter acesso à classe Appointments.

A classe Appointments, dentre outras coisas, nos permite reallizar consultas na agenda do Windows Phone e então exibir os compromissos registrados dentro de um determinado período de tempo.

Para nosso exemplo, estou declarando em XAML um DataTemplate que depois será associado a um ListBox. Esse conjunto será o responsável pela exibição dos dados na tela da APP.

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
 
<phone:phoneapplicationpage x:Class="Infoeste2015.Calendario"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="https://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
 
<!-- DEFINIÇÃO DO DATATEMPLATE PARA EXIBIÇÃO DOS DADOS DA AGENDA. -->
</phone:phoneapplicationpage><phone:phoneapplicationpage .Resources>
 <datatemplate x:Key="AtividadesItemTemplate">
  <stackpanel Margin="0,0,0,25">
   <textblock FontWeight="Bold" Text="{Binding Subject}" Style="{StaticResource PhoneTextTitle2Style}"></textblock>
   <textblock Text="{Binding Details}" TextWrapping="Wrap" FontWeight="Bold" Style="{StaticResource PhoneTextTitle3Style}"></textblock>
   </stackpanel><stackpanel Orientation="Horizontal">
    <textblock Text="{Binding StartTime, StringFormat='{}{0:dd/MM/yyyy}'}" Style="{StaticResource PhoneTextTitle3Style}"></textblock>
    <textblock Text="a" Style="{StaticResource PhoneTextTitle3Style}"></textblock>
    <textblock Text="{Binding EndTime, StringFormat='{}{0:dd/MM/yyyy}'}" Style="{StaticResource PhoneTextTitle3Style}"></textblock>
   </stackpanel>
   <textblock Text="{Binding Location, StringFormat='Local: {0:a}'}" Style="{StaticResource PhoneTextTitle3Style}"></textblock>
 
 </datatemplate>
</phone:phoneapplicationpage>
 
<!--LayoutRoot is the root grid where all page content is placed-->
<grid x:Name="LayoutRoot">
 </grid><grid .Background>
  <imagebrush ImageSource="Assets/Background/ImgFundo.png"></imagebrush>
 </grid>
<grid .RowDefinitions>
 <rowdefinition Height="Auto"></rowdefinition>
 <rowdefinition Height="*"></rowdefinition>
</grid>
 
<!--TitlePanel contains the name of the application and page title-->
<stackpanel Grid.Row="0" Margin="12,17,0,28">
 <textblock Text="INFOESTE 2015" Style="{StaticResource PhoneTextNormalStyle}"></textblock>
 <textblock Text="minha agenda" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"></textblock>
</stackpanel>
 
<!--ContentPanel - place additional content here-->
 <grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
 <!-- DEFINIÇÃO DO LISTBOX PARA EXIBIÇÃO DOS DADOS. REPARE O USO DO DATATEMPLATE ATRAVÉS DO ITEMTEMPLATE -->
 <listbox Name="lblAgenda" Height="600" ItemTemplate="{StaticResource AtividadesItemTemplate}" VerticalAlignment="Top"></listbox>
 </grid>

exemplo-agenda

Na sequencia temos a codificação necessária para acesso aos dados da agenda do Windows Phone.

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
 
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 Microsoft.Phone.UserData;
 
namespace Infoeste2015
{
 public partial class Calendario : PhoneApplicationPage
 {
  public Calendario()
  {
   InitializeComponent();
 
   //DECLARAÇÃO DE UM OBJETO DA CLASSE APPOINTMENTS PARA RECUPERAÇÃO DOS DADOS DA AGENDA
   Appointments compromissos = new Appointments();
   compromissos.SearchCompleted += compromissos_SearchCompleted;
 
   //DEFINIÇÃO DA DATA DE INÍCIO E FIM DO PERÍODO DE CONSULTA E TAMBÉM A QUANTIDADE MÁXIMA DE COMPROMISSOS A SEREM RECUPERADOS
   DateTime inicio = new DateTime(2015, 5, 18);
   DateTime final = inicio.AddDays(7);
   int max = 30;
 
   compromissos.SearchAsync(inicio, final, max, "");
  }
 
  //ESSE MÉTODOS SERÁ INVOCADO APÓS A FINALIZAÇÃO DA PESQUISA PARA ENTÃO EXIBIRMOS OS DADOS NO LISTBOX
  void compromissos_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
  {
   //OS DADOS CHEGAR ATRAVÉS DO ARGUMENTOS "e" DESTE MÉTODO. REPARE QUE NESSE EXEMPLO ESTAMOS BUSCANDO POR COMPROMISSOS CUJA PALAVRA CHAVE SEJA "INFOESTE".
   lblAgenda.ItemsSource = e.Results.Where(x => x.Subject.Contains("INFOESTE"));
  }
 }
}

Como resultado final podemos verificar a exibição dos compromissos registrados dentro de um determinado período e que contenham a palavra chave “INFOESTE”.

 

Abraços,

Eduardo Henrique Rizo (@eduardorizo)

MCP

Posts Relacionados: 

Fonte: Blog do Eduardo H. Rizo

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.