Windows Phone

Atualizando aplicativos do Windows Phone 7.1 para o Windows Phone 8

Michael Crump

Embora alguns desenvolvedores tenham atualizado seus projetos do Windows Phone 7.1 para tirar proveito dos novos recursos do Windows Phone 8, outros têm dúvidas sobre o que é necessário para atualizar e quais ferramentas e recursos devem usar. Neste artigo, mostrarei que passar do Windows Phone 7.1 para o Windows Phone 8 é mais fácil do que você pode imaginar. 

Novos modelos

Antes de examinar os modelos, primeiro pergunte-se quais problemas do mundo real você vai resolver com a atualização. Os desenvolvedores de jogos, que trabalham principalmente com o XNA, podem desejar alternar para o Direct3D porque o XNA não está mais sendo ativamente desenvolvido pela Microsoft. Você ainda tem a opção de criar um aplicativo XNA, mas ele não tirará proveito dos novos recursos do Windows Phone 8.

Além disso, os desenvolvedores da Web nativos finalmente têm a oportunidade de entrar em ação, uma vez que o Internet Explorer 10 é pré-instalado no telefone. Mas além do desenvolvimento de jogos e da Web, o Windows Phone 8 contém uma grande quantidade de novos recursos para desenvolvedores de XAML/C# e Visual Basic.

Estes são os novos modelos incluídos no SDK do Windows Phone 8:

  • Aplicativo XAML e Direct3D para Windows Phone: Esse é um projeto para criação de um aplicativo gerenciado pelo Windows Phone com componentes nativos. Na primeira inicialização, você observará que ele vem com dois projetos: um projeto do Windows Phone 8 e um Componente do Tempo de Execução do Windows (WinRT) em C++.
  • Aplicativo HTML5 do Windows Phone: Esse é um projeto para criação de um aplicativo do Windows Phone que usa principalmente conteúdo HTML. Esse modelo sempre é confundido com a versão do Windows Phone da WinJS (Biblioteca do Windows para JavaScript), o que não é. Ele simplesmente está usando um controle WebBrowser para exibir conteúdo HTML5.
  • Teste de unidade do Windows Phone: Este projeto contém testes de unidade que podem ser usados para testar aplicativos do Windows Phone. Este modelo é adicionado depois que você instala a versão RTM da Atualização 2 do Visual Studio. 

Atualizando seu projeto existente

Com certeza, os novos modelos de projeto ajudam a desenvolver novos aplicativos, mas e um aplicativo baseado em XAML existente já criado no Windows Phone 7.1? A boa notícia é que você pode atualizar esses aplicativos para o Windows Phone 8 clicando com o botão direito do mouse no projeto do Windows Phone 7.1 no Visual Studio 2012 e selecionando Atualizar para o Windows Phone 8. Você receberá um prompt que avisa que essa atualização não pode ser desfeita e não atualiza nenhum projeto referenciado. Você deverá ter certeza de que foi feito um backup de seu aplicativo antes de continuar. Também é possível atualizar para o Windows Phone 8 selecionando Propriedades do Projeto, clicando na página Aplicativo, selecionando Windows Phone OS 8 na lista suspensa e salvando suas alterações.

Além disso, se você ainda tiver um projeto do Windows Phone 7.1 existente, será solicitado a atualizá-lo para o Windows Phone 8. Mais uma vez, recomendo fazer backup de seu projeto antes de continuar.

Depois que seu aplicativo foi atualizado para o Windows Phone 8, você poderá usar as novas ferramentas e os recursos do SDK. Agora examinarei todas as novas opções de emulador disponíveis no Windows Phone 8.

Nova opções de emulador

No Windows Phone 7.1, você pode implantar em apenas dois tipos de emulador com o tamanho da tela de destino de 480x800 (WVGA). A única diferença nas imagens do emulador é a quantidade de RAM (512 MB ou 256 MB). O Windows Phone 8 adicionou dois novos tamanhos de tela: 768x1280 (WXGA) e 720x1280 (720p). Você também tem a opção de baixar a Atualização do Windows Phone SDK para o Windows Phone 7.8 (localizada em bit.ly/10pauq4) para adicionar mais emuladores para testar como seus aplicativos serão executados em dispositivos com o Windows Phone 7.8. Como o modelo de aplicativo XAML e XNA do Windows Phone é dirigido para o Windows Phone OS 7.1, você ainda pode testar seu aplicativo em um emulador do Windows Phone 8. Uma lista completa dos emuladores antigos e novos está disponível na Figura 1.

Emulator Options in Windows Phone 8
Figura 1 Opções de emulador no Windows Phone 8

Com os vários emuladores disponíveis, você não precisa mais depender de hardware físico para ver seu aplicativo executando nos vários dispositivos para Windows Phone 7 e 8 existentes. Os novos emuladores do Windows Phone 8 são VMs (máquinas virtuais) reais e são um dos melhores aprimoramentos feitos no SDK. 

Observação: Você precisará do Hyper-V, que está disponível apenas no Windows 8 Pro ou Enterprise, para novos emuladores. Para obter mais detalhes, consulte a página "Requisitos do sistema para emuladores do Windows Phone" do Centro de desenvolvimento do Windows Phone, em bit.ly/QWhAA2.

Além disso, lembre-se de que com os processadores poderosos dos PCs modernos, você deve testar seu aplicativo em um dispositivo físico antes de enviá-lo para o mercado para medir o desempenho no mundo real.

Agora que vimos como os novos modelos podem se beneficiar de diferentes conjuntos de desenvolvedores e examinamos as novas opções de emulador e como é fácil atualizar seu projeto existente para o Windows Phone 8, está na hora de atacar os outros problemas importantes que os desenvolvedores do Windows Phone 7 têm enfrentado.

O Painel de Simulação

Quando um aplicativo do Windows Phone está em execução, várias coisas podem interromper o UX: resposta lenta, falta de acesso à Internet, lembretes de chamadas recebidas, falha no aplicativo ao restaurar seu estado depois que o telefone foi bloqueado e muito mais. No Windows Phone 7.1, você provavelmente precisaria criar código que simulasse essas situações. Agora você pode manipulá-las com o novíssimo Painel de Simulação, conforme mostrado na Figura 2.

The Simulation Dashboard Included in the Windows Phone 8 SDK
Figura 2 O Painel de Simulação incluído no SDK do Windows Phone 8

Você pode acessar esse menu selecionando Ferramentas | Painel de Simulação no Visual Studio 2012. Usando o Painel de Simulação, você pode testar seu aplicativo antes de ser colocado no mercado para verificar exatamente como ele será executado em diferentes situações.

Habilitando o Network Simulation e selecionando uma velocidade de rede, você pode testar várias redes de dados de celular e Wi-Fi ou cenários onde não há nenhuma rede disponível. As opções de Signal Strength são particularmente interessantes, pois afetam a taxa de perda de pacotes e a latência da rede. Com essas opções na ponta dos dedos, você pode criar um aplicativo do Windows Phone 8 que execute bem em vários cenários.

Qualquer aplicativo dirigido para Windows Phone 7.1 ou 8 é desativado quando a tela de bloqueio é habilitada. Em seguida, ele é ativado novamente quando o dispositivo é desbloqueado. No Painel de Simulação, você tem a capacidade de bloquear ou desbloquear a tela facilmente para testar como seu aplicativo manuseia a ativação e a desativação. Opcionalmente, você pode pressionar a tecla F12 para mostrar a tela de bloqueio.

Finalmente, você pode usar “trigger reminders”, que simulará um alarme, lembrete, chamada telefônica, mensagem de texto ou notificação do sistema. Mais uma vez, você pode usar isso para testar como seu aplicativo trata ativações ou desativações.

Análise de aplicativos do Windows Phone

Embora o Painel de Simulação seja útil para fornecer cenários de mundo real que podem ocorrer para um usuário quando seu aplicativo estiver em execução no telefone do usuário, ele não ajuda com o desempenho de seu aplicativo. É para isso que você pode usar a análise de aplicativos do Windows Phone, que está disponível no menu Debug | Start Windows Phone Application Analysis.

Essa ferramenta fornece monitoramento de aplicativos, o que ajuda a avaliar a hora de início e a capacidade de resposta, bem como a criação de perfil. Isso ajuda a avaliar problemas de execução ou relacionados à memória em seu aplicativo. A opção de criação de perfil inclui configurações avançadas que permitem fazer coisas, como criação de perfil visual e amostragem de código, enquanto as opções de memória permitem coletar pilhas de alocação de memória e referências a objetos. Essas duas opções resultam na exibição de uma gráfico no Visual Studio 2012, bem como na adição de um arquivo .sap com carimbo de data/hora a seu projeto. Com os gráficos gerados, você pode fazer drill down de horas de início e de parada específicas e ver o resumo da observação gerado pelo Visual Studio 2012. A ferramenta Windows Phone Application Analysis é parte integrante de seu processo de controle de qualidade.

Kit de testes de armazenamento

Depois de testar seu aplicativo em diferentes cenários de usuários e de testar o desempenho do aplicativo com a ajuda do kit Windows Phone Application Analysis, você precisa testar seu aplicativo para verificar se ele é certificável na Loja do Windows Phone. Essa é uma etapa essencial, pois 30 minutos agora podem economizar vários dias de tempo perdido, se houver qualquer falha no aplicativo que poderia ter sido percebida usando esse kit.

O kit pode ser acessado facilmente clicando com o botão direito do mouse em seu aplicativo e selecionando Open Store Test Kit. O Windows Phone 7.1 também incluía essa funcionalidade, mas ela era chamada de Marketplace Test Kit. Novos testes aprimorados dirigidos para o Windows Phone 8 foram adicionados.

Na primeira inicialização, você poderá ver uma mensagem com um plano de fundo azul na parte inferior da tela dizendo "Store test cases have been updated. Would you like to install the updated test cases?" Você poderá selecionar Update e baixar os testes novos ou modificados. Isso é útil porque você sempre sabe que está trabalhando com os testes mais recentes disponíveis.

À esquerda de sua tela há três guias: Application Details, Automated Tests e Manual Tests. A guia Application Details garante que os recursos de imagem irão aderir às diretrizes da Loja do Windows Phone. Isso inclui o Store Tile e as capturas de tela do aplicativo para WVGA, WXGA e 720p se seu projeto der suporte a essas resoluções. A guia Automated Tests verifica os requisitos, a iconografia e as capturas de tela do pacote XAP. Tudo o que você precisa fazer para invocar esse recurso é clicar no botão Run Test. A guia final contém testes manuais. Até a redação deste artigo, há 61 testes manuais que podem ser realizados. Você precisa indicar manualmente se o aplicativo passou no teste ou não, mas a documentação completa mostra como fazer isso. Os testes manuais incluem testes para suporte a vários dispositivos, fechamento do aplicativo, capacidade de resposta e assim por diante.

Localização facilitada

No Windows Phone 7, não havia a possibilidade para muitos desenvolvedores de aplicativos localizarem seus aplicativos. Isso normalmente era devido ao fato de que havia pouca ou nenhuma ajuda para traduzir de um idioma para outro. A versão recente do Kit de Ferramentas de Aplicativo Multilíngue e os novos modelos de projetos resolveu esse problema.

O modelo padrão do Windows Phone 8 orienta você durante a localização com comentários internos no arquivo MainPage.xaml e também estrutura seu aplicativo com uma classe auxiliar e a pasta Resources. A Microsoft adicionou o Kit de Ferramentas de Aplicativo Multilíngue que originalmente estava disponível no Windows 8. Quando esse kit para Visual Studio 2012 (bit.ly/NgggGU) é instalado, ele é tão simples quanto selecionar Tools | Enable Multilingual App Toolkit. Depois que o kit de ferramentas tiver sido habilitado para seu projeto, selecione Project | Add Translation Languages para ver os idiomas disponíveis, conforme mostrado na Figura 3.

The Translation Languages Dialog Included with the Multilingual App Toolkit
Figura 3 A caixa de diálogo Translation Languages incluída com o Kit de Ferramentas de Aplicativo Multilíngue

Você pode filtrar pelo idioma desejado e pressionar o botão OK. Ele adicionará automaticamente os arquivos de idioma apropriados à sua pasta Resources. Um arquivo específico ao qual você deverá prestar atenção é o arquivo com a extensão .xlf. Esse é um arquivo XLIFF padrão da indústria que fornece controle granular sobre qualquer pseudotradução. Clicar duas vezes nesse arquivo abre o Multilingual Editor que permitirá traduzir de um idioma para outro com um simples clique no botão Translate. É possível ver um exemplo disso na Figura 4.

Translating from One Language to Another 
Figura 4 Traduzindo de um idioma para outro

Na Figura 4, você pode ver que ele traduziu automaticamente várias palavras para mim. Quando a tradução é concluída, você pode aprová-la ou transferi-la para um tradutor humano para revisão. Neste exemplo, as únicas palavras que precisavam de revisão eram "MEINE TELERIK APP" porque a palavra "Telerik" não está no recurso de tradução. O tradutor humano compreenderá que Telerik é escrito da mesma forma em alemão e em inglês e, portanto, pode ser deixado como está. Você pode salvar esse arquivo para obter suporte adicional para outro idioma.

Uma maneira fácil de testar isso é alterar o título do aplicativo no arquivo MainPage.xaml com a seguinte linha:

<TextBlock Text="{Binding Path=LocalizedResources.ApplicationTitle,
  Source={StaticResource LocalizedStrings}}"
  Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>

Em seguida, definir o idioma do telefone para qualquer idioma que você especificou. Em meu exemplo, selecionei alemão, e o título do aplicativo apareceu como "MEINE TELERIK APP". 

Tirando proveito do núcleo compartilhado

Com o lançamento do Windows 8 foi disponibilizado um núcleo compartilhado que os desenvolvedores do Windows Phone 8 podem usar. Alguns dos aprimoramentos mais notáveis do Microsoft .NET Framework 4.5 são o suporte para async e await e também uma maneira mais fácil de usar o armazenamento isolado.

No Windows Phone 7.1, você escreveria o código mostrado na Figura 5 para gravar um arquivo no armazenamento isolado.

Figura 5 Gravando um arquivo no armazenamento isolado no Windows Phone 7.1

private void WriteFileToIsolatedStorage(string fileName, 
  string fileContent)
{
  using (IsolatedStorageFile isolatedStorageFile =
    IsolatedStorageFile.GetUserStoreForApplication())
  {
    using (IsolatedStorageFileStream isolatedStorageFileStream =
      isolatedStorageFile.CreateFile(fileName))
    {
      using (StreamWriter streamWriter =
        new StreamWriter(isolatedStorageFileStream))
      {
        streamWriter.Write(fileContent);
      }
    }
  }
}

O código da Figura 5usa o namespace System.IO.IsolatedStorage, não disponível no Windows 8. Em vez dele, o Windows 8 e o Windows Phone 8 podem fazer uso do Windows.Storage e do padrão async/await para evitar afunilamentos de desempenho e melhorar a capacidade geral de resposta de seu aplicativo. Este é um exemplo de como escrever exatamente a mesma chamada no Windows Phone 8, tirando proveito do núcleo compartilhado:

public async Task WriteFileToIsolatedStorage(
  string fileName, string fileContent)
{
  IStorageFolder applicationFolder = 
    ApplicationData.Current.LocalFolder;
  IStorageFile storageFile = await applicationFolder.CreateFileAsync(
    fileName, CreationCollisionOption.ReplaceExisting);
  using (Stream stream = await storageFile.OpenStreamForWriteAsync())
  {
    byte[] content = Encoding.UTF8.GetBytes(fileContent);
    await stream.WriteAsync(content, 0, content.Length);
  }
}

Outro namespace muito usado no Windows 8 é o HttpClient. Embora o SDK do Windows Phone 8 ainda use a classe WebClient por padrão, a Microsoft forneceu a classe HttpClient por meio de NuGet. Se você simplesmente pesquisar por "Microsoft.Net.Http" e instalar o pacote NuGet, poderá escrever código, como o trecho a seguir, que funcionará no Windows 8 e no Windows Phone 8:

private async void Button_Click(object sender, RoutedEventArgs e)
{
  var httpClient = new HttpClient();
  var request = await httpClient.GetAsync(new Uri(
    "http://www.microsoft.com/", UriKind.RelativeOrAbsolute));
  var txt = await request.Content.ReadAsStringAsync();
  // Do something with txt, such as MessageBox.Show(txt)
}

Novos recursos cruciais

Até agora abordei várias maneiras de ajudar a facilitar a sua transição para o Windows Phone 8. Irei agora examinar vários novos recursos sem os quais seu aplicativo não pode viver.

Novos tipos de blocos O Windows Phone 7.1 tem um tipo de bloco chamado de Bloco móvel e um tamanho de bloco, 173x173, de outra forma conhecido como o tipo Bloco médio. O Windows Phone 8 introduz novos tipos e tamanhos de blocos:

  • Bloco móvel: É idêntico ao do Windows Phone 7.1 com a exceção dos novos tamanhos dos blocos. Ele se move da parte dianteira para a parte traseira.
  • Bloco icônico: É grandemente baseado nos princípios de design do Windows Phone para uma aparência moderna.
  • Bloco de ciclo: Permite fazer o ciclo de até nove imagens.

Uma comparação sobre os tamanhos de blocos pode ser encontrada na Figura 6.

Figura 6 Comparações de tamanhos de arquivos entre os vários tipos de blocos

Tamanho do bloco Tamanho de móvel e de ciclo (pixels) Tamanho de icônico (pixels)
Pequeno 159x159 110x110
Médio 336x336 202x202
Largo 691x336 N/D

Os blocos podem ser configurados facilmente por meio do arquivo WMAppManifest.xml selecionando "Tile Template" e adicionando as imagens apropriadas. Você também pode definir isso por meio de codebehind, e um "Modelo de bloco móvel para Windows Phone 8" está disponível no Centro de Desenvolvimento em bit.ly/10pavKC.

Tela de bloqueio e notificações No Windows Phone 7.1, você podia ver apenas notificações, como email, mensagens de texto e chamadas telefônicas. Agora, seus usuários podem usar seu aplicativo como um provedor de imagens de plano de fundo de tela de bloqueio e incluir notificações personalizadas semelhantes às descritas anteriormente. A configuração da imagem de plano de fundo pode ser tão fácil como adicionar uma imagem à sua pasta com o tipo de conteúdo e atualizando o arquivo de manifesto do aplicativo para declarar seu aplicativo como um provedor de plano de fundo. Clique com o botão direito do mouse no arquivo WMAppManifest.xml file, escolha "Abrir com" e selecione Editor (Texto) de XML e, em seguida, adicione esta extensão:

<Extensions>
  <Extension ExtensionName="LockScreen_Background"
    ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
</Extensions>

Em seguida, chame o trecho de código mostrado na Figura 7.

Figura 7 Configurando a imagem de plano de fundo da tela de bloqueio do telefone

private async void btnLockScreenImage_Click_1(
  object sender, RoutedEventArgs e)
{
  if (!LockScreenManager.IsProvidedByCurrentApplication)
  {
    await LockScreenManager.RequestAccessAsync();
  }
  if (LockScreenManager.IsProvidedByCurrentApplication)
  {
    Uri imageUri=new Uri(
      "ms-appx:///LockScreen.jpg", UriKind.RelativeOrAbsolute);
    Windows.Phone.System.UserProfile.LockScreen.SetImageUri(imageUri);
  }
}

Você observará que começa primeiro verificando se o usuário tem acesso para alterar o plano de fundo. Se não tiver, você apresentará uma GUI solicitando permissão, criará um URI com o caminho para a imagem e usará o namespace Windows.Phone.System.UserProfile.LockScreen para defini-la.

Você também pode adicionar uma notificação para mostrar um ícone e uma conta, de mensagens, chamadas etc., na área de notificação do dispositivo com o Windows Phone 8. Para obter mais informações a respeito, consulte o artigo "Notificações na tela de bloqueio para Windows Phone 8", em bit.ly/QhyXyR.

Fala Um dos novos recursos mais interessantes é a fala. Vários componentes de fala estão incluídos no SDK do Windows Phone 8:

  • Conversão de texto em fala (também conhecido como sintetização de voz): Permite que o texto seja falado para o usuário por meio do alto-falante, fone de ouvido ou conexão Bluetooth do telefone.
  • Conversão de fala em texto (também conhecido como reconhecimento de fala): Permite que seus usuários falem comandos para um telefone para realizar tarefas.
  • Comandos do voz: Permitem que seus usuários falem comandos fora de seu aplicativo mantendo pressionado o botão iniciar e dizendo "abrir" ou "iniciar", seguido pelo nome de seu aplicativo, para executar determinadas tarefas.

Tudo isso é possibilitado com as APIs Speech.Synthesis e Speech.Recognition. Uma implementação simples de conversão de texto para fala pode ser realizada com duas linhas de código em um manipulador de eventos:

private async void Button_Click(object sender, RoutedEventArgs e)
{
  SpeechSynthesizer synth = new SpeechSynthesizer();
  await synth.SpeakTextAsync("The latest MSDN issue has arrived!");
}

Basta garantir que os operadores async e await foram adicionados ao método.

Aproveite ao máximo a sua mudança

Discuti tudo, das novas ferramentas e modelos a alguns dos novos recursos incluídos no SDK do Windows Phone 8. Mostrei como é fácil implementar a localização e descrevi o bônus adicionado por uma base de código compartilhada com o Windows 8. Agora você deve ter o conhecimento para aproveitar ao máximo sua mudança do Windows Phone 7 para o Windows Phone 8.

Michael Crump é MVP da Microsoft, premiado com o INETA Champion e autor de vários livros eletrônicos sobre o .NET Framework. Trabalha na Telerik com foco no pacote de controle XAML. Você pode entrar em contato com ele no Twitter em twitter.com/mbcrump ou acompanhar seu blog, visitando michaelcrump.net.

Agradecemos aos seguintes especialistas técnicos pela revisão deste artigo: Jeff Blankenburg (Microsoft) e Lance McCarthy (Telerik)
Jeff Blankenburg (Jeffrey.Blankenburg@microsoft.com) é desenvolvedor e divulgador da Microsoft, coautor do livro Migrating to Windows Phone (Apress, 2011) e organizador de várias conferências técnicas.

Lance McCarthy é embaixador da Nokia e especialista em suporte ao XAML na Telerik.