Introdução
Quando realizamos o desenvolvimento de aplicações para o Windows Phone é extremamente comum a necessidade em realizar o consumo de dados externos, normalmente disponibilizados por meio de serviços.

Atualmente um padrão de mensagens que vem sendo adotado bastante a utilização do formato JSON (JavaScript Object Notation) para a troca de informações. O JSON basicamente é um formato leve e limpo para representação de dados.

É neste ponto que surgem muitas dúvidas dos desenvolvedores. Como trabalhar com JSON no .NET?

É muito mais simples do que parece, pois o .NET Framework oferece classes nativas para trabalhar com serialização e deserialização de JSON.

Criando seu aplicativo
Para demonstrarmos como é simples trabalharmos com JSON no .NET, iremos criar um exemplo que irá consumir a API do Twitter, que permite retornar JSON nativamente.

  • Abra o Visual Studio 2010;
  • Crie um projeto do tipo Windows Phone Application;
  • Abra o arquivo MainPage.xaml, caso ele ainda não esteja aberto;
  • Adicione os seguinte controles ao seu ContentPanel;
    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <TextBox Height="72" HorizontalAlignment="Left" 
                    Margin="10,10,0,0" Name="txtUsername"
                    VerticalAlignment="Top" Width="287" />
                
        <Button Content="Pesquisar" Height="72" 
                HorizontalAlignment="Left" Margin="290,10,0,0" 
                Name="btnPesquisar" VerticalAlignment="Top" 
                Width="160" Click="btnPesquisar_Click" />
                
        <ListBox HorizontalAlignment="Left" 
                    Margin="24,88,0,0" Name="listBox1" 
                    VerticalAlignment="Top" Width="415">
                    
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Height="132">
                        <Image Source="{Binding user.profile_image_url}"
                                Height="73" Width="73"
                                VerticalAlignment="Top"
                                Margin="0,10,8,0" />
                                
                        <StackPanel Width="340">
                            <TextBlock Text="{Binding user.name}"
                                        Foreground="{StaticResource PhoneAccentBrush}"
                                        FontSize="18"
                                        FontWeight="Bold"/>
    
                            <TextBlock Text="{Binding text}"
                                        HorizontalAlignment="Left"
                                        Width="340"
                                        FontSize="20" 
                                        TextWrapping="Wrap" />
    
                        </StackPanel>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
                    
        </ListBox>
    </Grid>
  • Abra o Solution Explorer;
  • Clique com o botão direito do mouse em seu projeto e selecione Add > Class;
  • Defina o nome do arquivo para user.cs e clique em Add;
  • No arquivo user.cs, altere a classe para que fique da seguinte maneira;
    public class user
    {
        public long id { get; set; }
        public string name { get; set; }
        public string profile_image_url { get; set; }
    }
  • Adicione uma nova classe em seu projeto, chamada user_timeline e altere sua definição para;
    public class user_timeline
    {
        public long id { get; set; }
        public string text { get; set; }
        public user user { get; set; }
    }
  • No Solution Explorer, clique com o botão direito do mouse em References > Add Reference;
  • Na janela Add Reference, selecione o assembly System.ServiceModel.Web e clique em OK;
  • Abra o arquivo MainPage.xaml.cs;
  • No início do arquivo adicione a seguinte linha de código;
    using System.Runtime.Serialization.Json;
  • Altere o método btnPesquisar_Click, incluindo o seguinte código;
    private void btnPesquisar_Click(object sender, RoutedEventArgs e)
    {
        WebClient twitter = new WebClient();
    
        twitter.DownloadStringCompleted += new DownloadStringCompletedEventHandler(twitter_DownloadStringCompleted);
    
        Uri uri = new Uri("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=" + txtUsername.Text);
        twitter.DownloadStringAsync(uri);
    }
  • Agora no método twitter_DownloadStringCompleted realize a leitura do retorno das informações;
    void twitter_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            MessageBox.Show("Ocorreu um erro.");
            return;
        }
    
        string json = e.Result;
        Stream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(json));
    
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<user_timeline>));
    
        List<user_timeline> resultado = (List<user_timeline>)serializer.ReadObject(stream);
        stream.Close();
    
        listBox1.ItemsSource = resultado;
    }
  • Execute a aplicação;
  • No campo texto, digite thiagojmonaco e clique no botão Pesquisar;
    image_thumb6 

Conclusão
Como pudemos ver basciamente o processo para trabalhar com JSON é criar as classes de mapeamento das entidades, e utilizar a classe DataContractJsonSerializer de maneir simples, rápida e indolor Smile. Até a próxima…

Categorias: artigos
Tags: , , ,

Introdução
No último dia 27/02/2012 foi anunciado pela equipe de Windows Phone uma grande novidade, o suporte a dispositivos de baixo custo, sendo que o primeiro aparealho anunciado foi o Nokia Lumia 610. A ideia principal é conseguir ofecere a plataforma do Windows Phone em grandes mercados em crescimento, como China, Costa Rica, Israel,por exemplo, o que significa uma possibilidade de 60% de mercado para o Windows Phone.

image

Nokia Lumia 610

Novos Aparelhos
Como citamos, o Nokia Lumia 610 foi apenas o primeiro aparelho apresentado, mas podem esperar que muitos outros vão surgir, inclusive novas marcas. Algumas marcas que irão lançar dispositivos de baixo custo são: Acer, HTC, LG, Nokia, Samsung, Toshiba e ZTE.

Tenho certeza que estão se preocupando o que muda no Windows Phone para suportar esses novos aparelhos, correto?

A equipe de engenharia do Windows Phone tem trabalhado duro, para sempre oferecer uma plataforma ainda mais robusta, com grande experiência para os usuários, e isso não será diferente nesses novos dispositivos pois diversas otimizações foram realizadas no sistema operacional, como por exemplo, um suporte otimizado a paginação de dados em memória par que possa utilizar, automaticamente, a memória física do dispositivo para alguns armazenamento de informações. Com isso temos a garantia de compatibilidade com a grande maioria das aplicações que já estão publicadas no marketplace.

Vale lembrar que as grandes diferenças desses novos aparelhos são o processador de menor custo – Qualcomm 7x27a – e a quantidade de memória reduzida para 256MB.

Update do SDK
Uma novidade que também foi anunciada no mesmo dia, foi uma atualização no Windows Phone SDK, o chamado Windows Phone SDK 7.1.1 Update, que dará acesso ao emulador de aparelhos com 256MB, permitindo que sejam realizados testes das suas aplicações.

Um ponto importante é que até o momento, essa atualização do SDK trata-se de um Technical Preview, ou seja, ainda não é a versão final e pode sofrer atualizações até sua versão final. Além disso ela NÃO inclui uma licença “go live”, isso significa que ainda não é permitido publicar aplicações desenvolvidas com este SDK.

Então, caso queira realizar seus teste, baixe já o Windows Phone SDK 7.1.1 Update – CTP.

O que há de novo no SDK?
Resumidamente, as novidades do Windows Phone SDK 7.1.1 Update – CTP são as seguintes:

  • Detectar Memória de Trabalho de Aplicação
    Foi adicionado um novo valor de propriedade de dispositivo, ApplicationWorkingSetLimit, que pode ser utilizado para detectar que a aplicação está sendo executada em um dispositivo de 256MB.
  • Emulador 256MB
    Como já foi dito anteriormente o emulador de Windows Phone no SDK foi atualizado para permitir que sejam simulados dispositivos de 256MB.
  • Framework XNA
    Os dispositivos com 256MB oferecem suporte total a XNA, no entanto ajustes de performance podem ser necessárias nas aplicações.
  • Backgroun Agents
    Background Agents, de maneira geral, não são suportados em dispositivos com 256MB.
  • Manifesto de Aplicação
    Apesar de os disposivitos 256MB oferecerem uma grande possibilidade de crescimento de mercado, pode ser que por algum motivo você não queira que sua aplicação seja distribuida neste tipo de dispositivo. Sendo assim, é possível definir no manifesto de sua aplicação que ela não pode ser executada em dispositivos com 256MB.
  • Publicidade
    Utilizando o Microsoft Advertising SDK for Windows Phone, é possível ganhar dinheiro com suas aplicações e jogos por meio de propagandas fornecidas pelo Microsoft Advertising. Foi disponibilizado um novo SDK para que seja utilizado em suas aplicações.

Conclusão
O lançamento dos novos dispositivos é uma grande oportunidade que o Windows Phone possui para ganhar uma boa fatia do mercado existente, pois oferecerá uma quantidade maior de dispositivos e o mais importante, com preços atrativos e competitivos.

É claro que para isso as aplicações precisarão estar preparadas para isso. Por isso nos próximos artigos iremos abordar como preparar nosso código para os dispositivos de 256MB. Até a próxima…

Há algum tempo atrás publiquei o artigo “Modelo de execução do Windows Phone” focado na versão 7.0 do Windows Phone. No entanto com o lançamento do Windows Phone 7.5 – Mango, temos algumas mudanças.

Todo o gerenciamento de estado para o Windows Phone 7.5 é possível, pois quando o usuário está em uma determinada aplicação e solicita a abertura de outra aplicação, o Windows Phone irá colocar a aplicação atual em um estado dormente, e irá ativar a nova aplicação solicitada. É possível que tenhamos diversas aplicações em estado dormente, aguardando para que sejam reativadas e voltem a ser utilizadas, no entanto caso a memória disponível se torne insuficiente para que a utilização do aparelho permaneça eficiente, o sistema operacional irá retirar as aplicações dormentes, que foram menos utilizadas recentemente, garantindo assim a experiência rica do usuário.

Terminologia

Termos

Significado

Application State

Dados que são utilizados em diversas páginas da aplicação. Um exemplo são dados consumidos de um webservices e que serão utilizados em áreas diferentes da aplicação.

Page State

Estado visual dos dados de uma página, como por exemplo as informações que são apresentadas nos controles. Caso o usuário saia da página e retorne, ele espera que os dados preenchidos continuem lá. Note que se uma nova instância da aplicação for iniciada esses dados não devem ser mantidos

Application Events

Existem quatro eventos principais para gerenciamento de estado da aplicação: Launching, Deactivated, Activated e Closing. Utilizamos estes eventos para gerenciar o estado das aplicações

Page Events

O objeto PhoneApplicationPage, expõe dois métodos principais: OnNavigateTo e OnNavigateFrom. Utilizamos estes métodos para gerencias o estado da página

Tombstoning

Processo onde uma aplicação é terminada, porém alguns dados sobre o estado da aplicação e da página são preservados.

State Dictionaries

Cada aplicação e página fornece um dicionário de chave/valor, que pode ser utilizado para armazenar informações. Este dicionário é preservado quando ocorre o tombstone da aplicação

Ciclo de vida de aplicações
Resumidamente, o clico de vida de uma aplicação pode ser representada pela seguinte figura (clique para ampliá-la):

imagem1

Com base na imagem anterior, vamos entender um pouco melhor cada uma das etapas:

  • Evento Launching
    O evento Launching é disparado quando o usuário inicia a aplicação por meio da tela inicial, lista de programas instalados, notificações toast, ou menu extra de fotos. Independente de qual a maneira de inicialização, será considerada uma nova instância da aplicação. Neste evento devemos ter o mínimo de código possível, garantindo assim que a aplicação será inicializada rapidamente.
  • Estado Running
    Após o evento Launching ser disparado, a aplicação já está efetivamente no ar, sendo executada. Ela continua em execução até que o usuário navegue para fora da aplicação, por meio da primeira página. Mesmo quando o aparelho está na tela de bloqueio, a aplicação continua em execução, a menos que se tenha utilizado o mecanismo de detecção de inatividade.
  • Método OnNavigateFrom
    O método OnNavigateFrom é executado quando o usuário navega para fora da página, e também é executado quando a aplicação é desativada. Quando este método for chamado é interessante que a aplicação salve o estado da página atual para que possa recuperar as informação quando o usuário retornar para esta mesma página.
  • Evento Deactivated
    O evento Deactivated é disparado quando o usuário navega para fora da sua aplicação, utilizando o botão Start ou iniciando uma nova aplicação. Vale ressaltar que quando utilizamos os Launchers & Choosers, que iremos abordar posteriormente, também irá disparar este evento. Neste momento também podemos realizar o armazenamento de informações importantes, para que sejam recuperadas posteriormente
  • Estado Dormant
    Após o evento Deactivated ser disparado, o sistema operacional irá colocar o aplicativo em estado dormente. Neste estado todo o processamento da aplicação é parado, porém a aplicação continua em memória, desta maneira quando o usuário retornar para aplicação não será necessário recriar o estado da aplicação, pois ele foi preservado.
  • Estado Tombstoned
    Uma aplicação em estado tombstoned é uma aplicação que foi finalizada, porém as informações de navegação e os dicionários de estado são preservados. O dispositivo mantém informação de cinco aplicações neste estado.
  • Evento Activated
    O evento Activated é chamado quando o usuário retorna para uma aplicação que estava no estado dormente, ou tombstoned. As aplicações devem verificar a propriedade IsApplicationInstancePreserved para determinar se o estado das informações foram preservadas, ou não. Caso a instância tenha sido preservada, significa que a aplicação estava em estado dormente e que o estado foi preservado, caso contrário será preciso utilizar o dicionário de estado para recuperar as informações.
  • Método OnNavigateTo
    O método OnNavigateTo é executado quando o usuário navega para uma página, o que inclui quando a aplicação é inicializada, quando é realizada a navegação entre páginas, e quando a aplicação é reativada.
  • Evento Closing
    O evento é disparado quando o usuário navega para fora da aplicação, encerrando completamente sua execução. Nenhum estado é armazenado automaticamente, caso seja necessário, a aplicação deve se encarregar de persistir informações importantes.

No artigo Manipulando o escopo do teclaco – InputScope, mostramos como é possível alterar o layout do teclado, para que o usuário possa preencher nossos campos com mais facilidade.

No entanto, muita gente tem dúvida de quais são os layouts de teclado existentes, e quais são as características de cada um deles.

Então, veja a tabela a seguir:

Teclado

InputScope

clip_image002

Chat, Text

clip_image004

AddressCity, AddressCountryName, AddressCountryShortName, AddressStateOrProvince, AddressStreet, AlphanumericFullWidth, AlphanumericHalfWidth, Bopomofo, DateDayName, DateMonthName, Default, FileName, FullFilePath, Hanja, Hiragana, KatakanaFullWidth, KatakanaHalfWidth, LogOnName, OneChar, Password, PersonalFullName, PersonalGivenName, PersonalMiddleName, PersonalNamePrefix, PersonalNameSuffix, Yomi

clip_image006

EmailNameOrAddress, EmailSmtpAddress, EmailUserName

clip_image008

Url

clip_image010

NameOrPhoneNumber

clip_image011

AddressStreet, CurrencyAmountAndSymbol, CurrencyChinese, PostalAddress, PostalCode, Time

clip_image013

TelephoneAreaCode, TelephoneCountryCode, TelephoneLocalNumber, TelephoneNumber

clip_image015

CurrencyAmount, DateDay, DateMonth, DateYear, Digits, Number, NumberFullWidth, NumericPassword, TimeHour, TimeMinorSec

clip_image017

Maps, Search

clip_image019

Formula

Espero que tenha ficado um pouco mais fácil e que seja útil para muitos. Até a próxima…

Categorias: artigos
Tags: , , ,

Hoje gostaria de compartilhar com vocês, a versão atualizada do Class Library Poster do Windows Phone OS 7.1. Tenho certeza que será útil para muitas pessoas.

Windows Phone Poster - OS 7.1