Primeira aplicação em Android

Primeira aplicação em Android – Parabéns PPLWARE

Criado por Pedro Pinto em 18 de Abril de 2011 | 28 comentários

Aproveitando que hoje é um dia muito importante para o pplware, decidimos “inaugurar” a nossa rubrica de programação para dispositivos móveis com Android. Como normalmente refiro, programar em Android não é diferente de programar em outras linguagens de programação, no entanto é necessário perceber como se interligam os layouts em XML, com as classes em Java e por aí fora.

Vamos lá então começar com o tradicional “Hello World” e aproveitamos para dar os parabéns ao pplware pelo sexto aniversário.

android_10

Há uma lenda que diz o seguinte “Se vais começar na programação e a tua primeira aplicação não é o Hello World, nunca vais ser bom programador !!!!” :) .

Depois de prepararem o vosso ambiente de trabalho Eclipse + SDK (ver aqui), vamos abrir o Eclipse e seguir os seguintes passos:

Passo 1 – Criar um novo projecto Android. Para tal, no Eclipse, escolhemos File—>New—>Other e depois escolhemos Android Project e carregamos em Next.

android_00

Passo 2 – Em seguida vamos indicar os parâmetros do nosso projecto

  • Project name – Nome a atribuir ao projecto
  • Built Target – Requisito mínimo a nível de versão  Android para correr a nossa aplicação
  • Application name: Nome da aplicação
  • Package name: Namespace do pacote a criar ( No mínimo dois nomes).
  • Create Activiy: (Opcional) Nome a associar classe default.
  • Min SKD Version: versão mínima do SDK (Podem ver o número a associar no Built Target)

android_01

Para finalizar carregamos em Finish. Depois de definido os parâmetros anteriores, a aplicação está pronta a funcionar. Vamos apenas dar uma vista de olhos na estrutura do projecto.

Passo 3 – De um modo geral, um projecto para Android é constituído por classes .java (que estão no directório src), layouts baseados em .xml (que estão normalmente dentro da pasta res/layouts), ficheiros em .xml que podem guardar valores de variáveis e mais um conjunto de directórios que servem de suporte ao projecto (para incluir imagens, ficheiros de áudio, etc).

android_02

Passo 4 – Abrindo o ficheiro HelloWorld.java, podemos verificar que foi  uma classe que deriva da classe Activity e que possui um método onCreate que invoca o método setContentView, que invoca o layout main.

android_03

Passo 5 – Vamos agora dar uma espreitadela ao ficheiro main.xml que se encontra dentro da pasta res/layout. Como podemos verificar, é exibido um preview do layout e apresentado o texto “Hello Word, HelloWord” através de uma textview.

android_04

Passo 6 – Acedendo às propriedades da textview, podemos verificar que o texto a apresentar vem da variávelhello que é do tipo String.

android_05

Passo 7 – A informação dessa variável encontra-se no ficheiro strings.xml, que se encontra em res/values.

android_06

Passo 8 – Vamos agora correr a aplicação e ver o resultado. para tal, convém seleccionar a classe principal (neste caso HelloWorld.java) e carregar no botão Run

android_07

Passo 9 – Depois escolhemos a opção Android Application e deixamos o emulador correr.

android_08

Passo 10 – E está feita a vossa primeira aplicação para Android. Caso tenham o smartphone com Android ligado ao PC, podem escolher que a mesma corre directamente no equipamento.

android_09

Trabalho de casa

Agora que começaram a dar os primeiros passos na programação para Android, experimentem fazer o seguinte: em vez de apresentar o Hello World, a aplicação deverá apresentar o texto PARABENS PPLWARE pelo teu 6º Aniversário!!!!, tal como é apresentado na primeira imagem. Deixo uma dica, lembram-se da String hello? Vejam o Passo 6.

Considerações finais

Este é o nosso primeiro artigo sobre programação para Android e esperamos que tenham compreendido. Nos próximos artigos desta rubrica abordaremos mais algumas características e pormenores. A fase inicial (fase de adaptação) é sempre a mais difícil e por isso é importante saber a vossa opinião, as vossas duvidas, as vossas sugestões.

Download: HelloWorld

Chrome chegou à versão 12 e traz muitas novidades…

Chrome chegou à versão 12 e traz muitas novidades…

Criado por Pedro Simões em 27 de Março de 2011 | 65 comentários

Tal como prometido pela equipa de desenvolvimento do Chrome, as versões estão a sair a um ritmo estável e cadenciado. Em todas elas são apresentadas novidades que vão sendo amadurecidas e passadas para as versões mais estáveis.

O incremento dos números de versão reflete sempre uma alteração a nível do motor do Chrome ou do motor do Javascript. Por essa razão saíram esta semana duas novas versões na família Chrome. A versão Beta atingiu a versão 11 e a Dev chegou à 12. Qualquer uma delas está repleta de novidades que vão com certeza ser do agrado dos muitos utilizadores.

Estas duas versões são a antecâmara do que vai ser passado para a versão final do Chrome. São aqui testadas e amadurecidas novas funcionalidades antes de serem disponibilizadas a todos os utilizadores do Chrome. Cada uma das duas versões tem por isso número de versão distinto, consoante a maturidade das implementações.

Algumas dessas novas funcionalidades não são disponibilizadas de forma directa, sendo necessário activá-las através da interface que os programadores disponibilizaram dentro do Chrome. Ficou assim mais simples activar ou desactivar cada uma delas, sem termos de recorrer a adições de flags à linha de comando do executável do Chrome. Coloquem na Omnibox do vosso Chrome o texto about:flags e activem as que entenderem ser necessárias.

Chrome Dev 12

Esta versão é, dentro da familia Chrome, a uma das mais desenvolvidas e a que apresenta sempre as maiores novidades. Apenas tem à sua frente a versão Canary, e mesmo esta apenas retém durante alguns dias essas mesmas novidades.

A release 12 desta versão apresenta algumas novidades que vão com certeza ser incorporadas nas restantes versões, depois da devida maturação e resolução de eventuais bugs que surjam. Depois de ter visto o seu ícone ser alterado, o Chrome voltou atrás e nesta versão aparece o antigo. Provavelmente esta alteração será revertida.

Outras novidades que a versão 12 apresenta estão relacionadas com funcionalidades do próprio browser. Existe uma nova página quando abrimos um separador novo. Esta aparenta estar preparada para equipamentos com suporte para toque. Para já, está numa fase ainda muito embrionária e apenas disponibiliza o acesso às WebApps instaladas. Se a quiserem testar devem activa-la na zona de experiências do Chrome (about:flags).

Outra novidades que também está acessível na mesma zona é a disponibilização de um contador de FPS sempre que a aceleração por hardware for usada.

Chrome Beta 11

A nova versão beta do Chrome trouxe para a ribalta algumas das funcionalidades que estão em testes na versão Dev há já algum tempo. A primeira e mais visível é a alteração do logótipo do Chrome (que entretanto voltou à original na versão Dev). Existiram ainda alterações no motor Webkit e no V8, motor de JavaSript, e foram adicionadas funcionalidades como transformações CSS 3D e compositing suportadas por aceleração GPU.

Para além das novidades mais óbvias, existe uma que fará as delicias de todos os utilizadores desta versão Passou a estar disponível o suporte para a utilização de uma funcionalidade que o HTML5 implementa e que é o HTML5 Speech Recognition, ou seja, o reconhecimento de voz. Passamos a poder introduzir texto no Chrome através da utilização da nossa voz, podendo assim ditar texto para o Chrome e este converte-o de forma automática. Podem testar esta funcionalidade nesta página. Devem ter instalado no vosso computador a versão Beta 11 ou a Dev 12.

Todas as novidades que têm sido apresentadas para o Chrome estão a torna-lo num browser muito apetecido de usar. Está na linha da frente na implementação de funcionalidades que representam os avanços neste campo.

Este browser é desde as suas primeiras versões capaz de competir de forma igual com as restantes propostas do mercado, com uma vantagem óbvia por libertarem actualizações com uma elevada frequência. Deixamos de ter de esperar meses ou anos a fio para vermos implementadas as funcionalidades que precisamos agora.

Se não são utilizadores do Chrome aconselhamos que o testem de forma exaustiva, para que entendam que é tão bom ou melhor que o browser da vossa preferência.

Licença: Freeware
Sistemas Operativos: Windows/ Linux/ Mac OS
Download Versão Canary: Windows
Download Versão Dev: Windows | Debian (32bits / 64bits) | Fedora (32bits / 64bits) | Mac
Download Versão Beta: Windows | Debian (32bits / 64bits) | Fedora (32bits / 64bits) | Mac
Download Versão Estável: Windows | Linux | Mac
Homepage: Google Chrome

MyCod.es – Crie e altere a informação de um código QR

MyCod.es – Crie e altere a informação de um código QR

Criado por Pedro Pinto em 24 de Março de 2011 | 27 comentários

Os códigos QR vieram para ficar! Em tempos, numa deslocação a Espanha, achei interessante ver numa feira municipal uma barraca onde se vendiam pulseiras e outras bugigangas, um cartaz com um código QR para as pessoas consultarem o site.

No entanto, os códigos QR são hoje usados em cartões de visitas, publicidades indoor e outdoor, etc.

E se for necessário alterar o url associado a um determinado código QR?

O QR Code é a evolução natural dos actuais códigos de barras. Este código de barras bi-dimensional, foi criado pela empresa Nipónica Denso-Wave, em 1994. Devido ao sucesso desta “tecnologia”, muitas empresas estão a inserir nas suas publicidades códigos QR que “levam” os utilizadores normalmente às páginas dos produtos em questão. E se o URL associado ao código QR mudar, é necessário fazer novo investimento?

Até à relativamente pouco tempo, tal alteração não era possível de ser efectuada. Recentemente, com o aparecimento do serviço online mycod.es é possível criar facilmente códigos QR, associar um URL e posteriormente alterar esse mesmo URL.

Principais características do serviço mycod.es

  • Fácil criar códigos QR e associar URLS
  • Suporte para estatísticas
  • Suporte para notificações, através do site online
  • Reaproveitamento do código QR

qr_01

Depois de aceder ao serviço, basta indicar o URL e uma pequena designação. Depois basta carregar no botão Add, e o código QR é automaticamente criado.

qr_02O serviço possibilita um controlo total sobre o código QR. É possível verificar se funciona correctamente, detalhes, estatísticas com um bom nível de detalhe, apresentação do número de scans e remover o código QR.

qr_07Na versão gratuita, é possível criar até 5 códigos QR com um máximo de 50 scans por mês. No entanto, a empresa disponibiliza outros planos de preços (ver aqui).

O conceito associado a este serviço é bastante interessante. É pena não ser possível mais scans por cada código QR criado na versão gratuita.

É hora de darem asas a vossa imaginação e arranjarem uma ideia genial para colocar um código QR.

Artigos relacionados

Homepage: MyCod.es

Bump – É só bater o Android no iPhone

Bump – É só bater o Android no iPhone

Criado por Pedro Pinto em 27 de Março de 2011 | 9 comentários

Partilha simples de informação entre smartphones com Android e também iPhone.

Há uns anos a possibilidade de ligar dois equipamentos em rede era algo complexo.Ainda me lembro a primeira vez que tentei ligar dois computadores entre eles. Na altura tinha um cabo paralelo e lembro-me foi uma tarefa árdua. Nos dias de hoje tudo é bem mais simples, há mais tecnologias e aplicações que facilitam este processo.

Recentemente experimentei uma aplicação bastante engraçada que permite partilhar informação entre um Android e iPhone. Vamos conhecer o Bump.

bump_000

O Bump simplifica aquilo que por norma é chato de realizar nos smartphones, configurar os equipamentos para poder partir informação. Com o Bump, para partilhar informação entre equipamentos (Android e iPhone) basta apenas bater um equipamento no outro (tipo como se estivéssemos a comemorar).

bump_01

O Bump está dividido em duas partes: a aplicação que corre que dispositivo e um algoritmo inteligente que corre na cloud dos servidores do serviço Bump. A aplicação recorre ao acelerómetro para activar o “bump” sendo que essa informação é de imediato enviada para a cloud. O Bump usa a ligação wifi/3G para efectuar a transferência de ficheiros entre equipamentos.

Vejam o Bump em acção:

Como instalar o Bump no Android?

Caso queiram experimentar esta aplicação, basta que apontem o vosso leitor de códigos QR para a imagem abaixo, e serão encaminhados para a aplicação no Android Market.

qr_bump01

Como instalar o Bump no iPhone?

Para instalar o Bump no iPhone basta aceder a AppStore aqui, ou carregando na imagem seguinte

appStore

Com o Bump acabou-se o “stress” de configurar os smartphones para partilharem informação entre eles. Basta ter o bump instalado e a correr (no Android ou iPhone) e fazer o “bump” entre eles.

Homepage:Bump

Extensão Chrome: Speechify

Extensão Chrome: Speechify

Criado por Pedro Simões em 27 de Março de 2011 | 6 comentários

As novidades que o Google Chrome disponibiliza são depressa aproveitadas por quem desenvolve extensões. Ainda esta semana foi disponibilizada a versão Beta 11 e que traz o suporte para HTML5 Speech Recognition e já aparecem extensões que conseguem dar esta funcionalidade à maioria dos motores de busca, apesar de estes ainda não o suportarem.

Com o  Speechify vão poder ditar o que pretendem pesquisar para o vosso browser e este dará os resultados que procuram. Apenas necessitam de carregar no ícone do microfone que será apresentado junto a todas as caixas de pesquisa.

O Speechify consegue adicionar esta funcionalidade à maioria dos motores de pesquisa que estão actualmente na Internet. São suportadas as pesquisas no Gogole, no Bing, no Yahoo e em muitos outros. Se quiserem passam a poder pesquisar no Pplware sem recorrerem ao teclado.

Basta ditar o texto e tudo será tratado de forma automática. Infelizmente a conversão de voz para texto está baseada em inglês e a maioria das palavras ditas em português não são compreendidas. No idioma inglês tudo se processa de forma muito correcta.

Depois de instalado o Speechify, passamos a ter junto das caixas de pesquisa um pequeno microfone que podemos usar para chamar o Speechify. Abre-se uma pequena caixa e podemos começar a falar para que o nosso áudio seja convertido em texto. Devem falar pausadamente e de forma clara, pois assim o Speechify consegue entender melhor o que lhe foi dito.

Outra funcionalidade interessante que o Speechify disponibiliza é a capacidade de colocarmos Tweets directamente a partir de áudio que indiquemos. Basta carregarmos no ícone que fica disponível no zona de extensões do Chrome e podemos então aceder a esta função.

Basta mais uma vez carregar no microfone e quando este indicar que está preparado podemos começar a ditar o que pretendemos ver escrito. Mais uma vez tudo se processo de forma automática, devendo apenas ter em atenção se o texto que o Speechify detectou está certo.

O Speechify é uma excelente extensão e será muito útil para conseguirmos agilizar a utilização do browser. Lamentavelmente ainda não entende de forma correcta o nosso Português e por isso é propenso a erros na interpretação.

Esta extensão é muito similar a outra que j apresentámos aqui no Pplware. O Voice Search foi na altura testado e também ele fazia uso desta função no Google Chrome, mas na altura que a apresentámos o suporte para o HTML5 Speech Recognition era ainda muito rudimentar e tinha de ser activado de forma manual. Agora com a disponibilização desta função de forma nativa na versão Beta 11 do Chrome tudo fica mais fácil.

Usem o Speechify para pesquisarem nos vossos motores de busca preferidos ou para introduzirem conteúdo em caixas de texto, sem terem de tocar no teclado. Testem e vão com certeza ficar agradados.

O Speechify requer para funcionar que tenham instalado pelo menos a versão Beta 11 do Chrome ou outra versão mais recente (Dev, Canary ou Chromium).

Veja aqui mais extensões e aplicações Chrome

    Leia mais informação sobre plugins Chrome no Forum Pplware: Google Extensions e Google Chrome

    Download: Speechify 1.3
    Homepage: Speechify

    DropPages – Criar um site no Dropbox de forma simples

    DropPages – Criar um site no Dropbox de forma simples

    Criado por Pedro Simões em 28 de Março de 2011 | 21 comentários

    Falar do Dropbox aqui no Pplware é recordar e descobrir um vasto conjunto de ferramentas e de funções que achamos simplesmente fenomenais e obrigatórias. É uma forma diferente de ter um serviço simples, mas ao mesmo tempo imprescindível. São muitas e variadas as propostas que vos apresentámos para adicionar ao serviço principal.

    Uma das que mais gozo me deu escrever, e porque é uma função inerente ao próprio serviço e que não foi com certeza planeada, foi a possibilidade de alojarmos pequenos sites. Não é difícil criar no Dropbox um site, mas agora ficou ainda mais fácil com o aparecimento do DropPages.

    Se bem se recordam do que publicámos, bastava colocar os ficheiros html numa pasta pública e estavam expostos ao mundo. Era no entanto importante que quem o fizesse tivesse um mínimo conhecimento sobre html e, se pretendesse usar, sobre CSS. Existe sempre a limitação de não serem suportadas linguagens de compilação do lado do servidor, tais como o php ou outras.

    Infelizmente o endereço que é disponibilizado para acesso ao vosso site é um pouco confuso e difícil de decorar. A solução proposta era criarem um endereço no bit.ly, o que na altura era óptima.

    Por forma a contornar alguns destes problemas e para simplificar o processo de criação de sites dentro do DropBox, foi criado o serviço DropPages. Com este novo serviço o processo de criação de HTML deixa de ser necessário e os utilizadores apenar têm de criar ficheiros de texto, com recurso à sintaxe Markdown. Esta linguagem é parecida com a que é usada para criar páginas em Wikis e é extremamente simples de entender e de aplicar.

    Por forma a dar alguma beleza imediata aos sites que vão criar e para vos retirar o processo de estarem a criar uma imagem do vosso agrado, são disponibilizados três templates que devem usar para criar o vosso site.

    O processo de criação é extremamente simples. Em primeiro lugar descarregam um desses três templates e colocam-no numa pasta do vosso DropBox. O nome da pasta que criarem para partilhar com o DropPages é extremamente importante. Será esse o endereço que vai ser público para o vosso site. No nosso caso escolhemos pplware.droppages.com.

    Depois de criada a pasta devem partilhar com o serviço DropPages. Basta que adicionem o endereço server1@droppages.com à partilha e esperem que ele vos aceite.

    Enquanto aguardam a resposta podem ir tornando o site mais a vosso gosto. Para isso acedam à pasta e preparem-se para editar os conteúdos. Existem dentro dessa pasta outras três que contêm o seguinte:

    • Content – Aqui deverão colocar o vosso conteúdo. Um ficheiro por página e se pretenderem ter secções devem criar pastas e aí dentro colocar os ficheiros. Lembrem-se que deve sempre existir um ficheiro index dentro da pasta e das sub-pastas. Os ficheiros podem ter a extensão txt.
    • Templates – Esta é a pasta onde está o template e todas as suas definições. Alberga o esquema das páginas que vão ser criadas. Podem alterá-lo para terem uma página mais personalizada.
    • Public – É aqui dentro que está o vosso conteúdo público, tal como o CSS, o JavaScript e as imagens. Alterem o CSS se tiverem confiança para tal.

    Ao receberem a mensagem a indicar que a partilha da pasta foi aceite pelo DropPage a vossa página está pública. Este serviço tem a vantagem de não necessitarem de qualquer conta ou acesso FTP, de terem várias cópias (no vosso PC, no DropBox e no DropPages) e de ser extremamente simples de criar ou editar as vossas páginas.

    Testem o serviço e criem os vossos sites. Criem um para alojar as vossas fotos, o vosso CV ou apenas para partilharem com amigos o que bem entenderem. O Pplware testou e criou um pequeno site sem qualquer dificuldade. Acedam-lhe e vejam as potencialidades do DropPages. Demorámos 2 minutos a fazer o que ali podem encontrar.

    Artigos relacionados:

    Download: Temas DropPages
    Homepage: DropPages
    Homepage: DropBox

    Site do MySQL atacado via SQL Injection

    Site do MySQL atacado via SQL Injection

    Criado por Pedro Pinto em 29 de Março de 2011 | 42 comentários

    Parece que o feitiço se virou contra o feiticeiro, mas segundo informação disponibilizadas no site Techie Buzz, a página oficial do projecto MySQL (motor de base de dados bastante popular) foi atacado através de um mecanismo denominado de SQLInjection (alguns sites referem que foram utilizados mecanismos mais elaborados como XSS e blind SQLi).

    Ao que tudo indica, além do ataque ter sido efectuado com sucesso foram ainda “roubados” dados importantes da empresa. O ataque ao que consta foi realizado através de uma página de consulta de cliente, tendo já sido divulgadas algumas passwords, inclusive a de um Director de produtos do MySQL com apenas 4 dígitos. Algumas passwords de administradores do serviço blogs.mysql.com foram também já tornadas públicas.

    sql_injection

    Mas como funciona um ataque de SQL Injection?

    O SQL injection tal como o nome indica é um mecanismo que permite  “injectar” instruções SQL dentro de uma consulta (query) realizada à base de dados. Desta forma, o hacker pode “construir” a query SQL e obter informações privilegiadas que se encontram guardadas na base de dados (ex. passwords de utilizadores).

    Imaginem por exemplo um formulário HTML para autenticação de um utilizador num determinado site. Depois do utilizador carregar no botão enviar, é executado no MySQL a seguinte query SQL:

    SELECT user,passwd FROM users WHERE user = 'pplware' AND passwd='123456'

    Os dados user e passwd são passados via POST numa query do tipo:

    SELECT user,passwd FROM users WHERE user = '$user' AND passwd='$passwd';

    Agora imaginem que é um hacker e que no campo password colocou:

    '123456';DROP TABLE users;

    Neste caso a query ficava algo do tipo:

    SELECT user,passwd FROM users WHERE user =  'pplware' AND passwd='123456';DROP table users;

    Veja uma demonstração de como funciona o mecanismo SQL Injection:

    Caso seja um utilizador com conta no site mysql.com é aconselhável que proceda rapidamente à alteração da sua password.

    Desenvolvimento para Windows Phone 7 – Parte IV

    Desenvolvimento para Windows Phone 7 – Parte IV

    Criado por Pedro Simões em 1 de Abril de 2011 | 2 comentários

    Por Helder Ferreira para o PPLWARE.COM

    Utilização dos recursos do dispositivo

    Após no último artigo termos analisado os principais controlos disponibilizados para esta plataforma de desenvolvimento, vamos neste artigo utilizar recursos do dispositivo.

    Nos dispositivos Windows Phone 7, temos acesso a vários sensores que são incluídos de base nos mesmos, aqui a vantagem dada pela Microsoft é que do lado de quem desenvolve aplicações não é necessário preocupar com questões mais técnicas relativamente aos sensores visto existirem regras do lado dos fabricantes para que todos os dispositivos funcionem da mesma forma.

    Deste modo a equipa de desenvolvimento pode focar os esforços nas regras de negócio das suas aplicações e não na criação de vários métodos para funcionarem em dispositivos distintos.

    Introdução aos Launchers e Choosers

    Nas aplicações Silverlight para Windows Phone são utilizadas estas duas opções para aceder a funcionalidades build-in dos dispositivos, quando executamos um destes métodos a aplicação é desactivada e a aplicação seleccionada é executada. Quando a aplicação termina a nossa aplicação é reactivada. Este processo é chamado de tombstoning em artigos futuros iremos falar mais sobre este processo e do impacto que pode ter nas nossas aplicações visto estarmos a falar de um sistema sem multitasking.

    Os Launchers e Choosers estão no namespace Microsoft.Phone.Tasks, por isso temos que incluir uma directiva Using no nosso código para utilizar estes recursos.

    Launchers

    A forma de utilizar estas classes é comum, ou seja:

    1. Criar uma nova instância da classe;
    2. Atribuir as propriedades à mesma;
    3. Executar o método Show.

    Vamos então ver alguns exemplos:

    PhoneCallTask – Usado para efectuar chamadas indicando o número a ser marcado, ou podemos também exibir a lista de contactos a partir da qual o utilizador pode seleccionar o contacto para o qual deseja fazer a chamada.

    Vamos adicionar no XAML um simples botão para efectuar a chamada,

    <Button Name="ButtonDialer" Content="Efectuar chamada"   VerticalAlignment="Bottom" Click="ButtonDialer_Click"   Height="79" Margin="0,0,0,10" />

    E no código vamos então adicionar o comportamento,

    private void ButtonDialer_Click(object sender, RoutedEventArgs e)
    {
    // launcher.
    PhoneCallTask phoneCallTask = new PhoneCallTask();
    // Informação de contacto para o qual desejamos efectuar a chamada
    phoneCallTask.PhoneNumber = "(352)-555-5555";
    phoneCallTask.DisplayName = "pplware";
    // Lançamento do objecto.
    phoneCallTask.Show();
    }

    Corremos o projecto e quando o utilizador clicar no botão a chamada é efectuada.

    SmsComposeTask – Assim como para efectuar uma chamada, temos também o launcher para enviar mensagens de texto.

    XAML

    <Button Name="ButtonSmsr" Content="Enviar sms"
    VerticalAlignment="Bottom" Click="ButtonSms_Click"
    Height="79" Margin="0,0,0,10" />

    CODE

    private void ButtonSms_Click(object sender, RoutedEventArgs e)
    {
    // launcher.
    SmsComposeTask smsComposeTask = new SmsComposeTask();
    // Informação de contacto para o qual desejamos enviar o sms
    smsComposeTask.Body = "Mensagem";
    smsComposeTask.To = "(352)-555-5555";
    // Lançamento do objecto.
    smsComposeTask.Show();
    }

    EmailComposeTask – Vamos terminar esta secção apresentando o Launcher de envio de email.

    XAML

    <Button Name="ButtonEmail" Content="Enviar email"
    VerticalAlignment="Bottom" Click="ButtonEmail_Click"
    Height="79" Margin="0,0,0,10" />

    CODE

    private void ButtonEmail_Click(object sender, RoutedEventArgs e)
    {
    // launcher.
    EmailComposeTask emailComposeTask = new EmailComposeTask();
    // Informação de contacto para o qual desejamos efectuar a chamada
    emailComposeTask.To = "xpto@hotmail.com";
    emailComposeTask.Subject = "Exemplo de email";
    emailComposeTask.Body = "Corpo da mensagem";
    // Lançamento do objecto.
    emailComposeTask.Show();
    }

    De notar que se executarmos este launcher no emulador, o sistema vai apresentar uma mensagem indicando que a conta de correio electrónico não se encontra configurada. Mas no caso de estarmos a executar a aplicação directamente num dispositivo é apresentado um ecrã em que podemos seleccionar a conta de correio electrónico a utilizar e após isso a mensagem pronta a ser enviada.

    Choosers

    A principal diferença dos launchers em relação aos choosers prendesse no facto de neste último caso o sistema lança um evento quando o utilizador efectua uma intervenção.

    Vamos ver o caso em que a aplicação não sabe o número para o qual deve efectuar uma chamada e pede a intervenção do utilizador para seleccionar um número da sua lista de contactos.

    PhoneNumberChooserTask – Se pretendermos que o utilizador seleccione um contacto existente na sua lista, apenas temos que instanciar o chooser PhoneNumberChooserTask.

    Neste caso já é lançado um evento quando o utilizador selecciona o contacto para o qual deseja efectuar a chamada. Nesse evento obtemos o número para o qual o utilizador deseja efectuar a chamada e lançamos o launcher PhoneCallTask da mesma forma que já fizemos anteriormente.

    XAML

    <Button Name="ButtonDialerChooser" Content="Lançar contactos"
    VerticalAlignment="Bottom" Click="ButtonDialerChooser_Click"
    Height="79" Margin="0,0,0,10" />

    CODE

    private void ButtonDialerChooser_Click(object sender, RoutedEventArgs e)
    {
    PhoneNumberChooserTask phoneNumberChooser = new PhoneNumberChooserTask();
    phoneNumberChooser.Completed += new EventHandler<PhoneNumberResult>(phoneNumberChooser_Completed);
    phoneNumberChooser.Show();
    }   void phoneNumberChooser_Completed(object sender, PhoneNumberResult e)
    {
    if (e.TaskResult == TaskResult.OK)
    {
    // Chooser.
    PhoneCallTask phoneCallTask = new PhoneCallTask();
    // Informação de contacto para o qual desejamos efectuar a chamada
    phoneCallTask.PhoneNumber = e.PhoneNumber;
    // Lançamento do objecto.
    phoneCallTask.Show();
    }
    }

    CameraCaptureTask – Com este método podemos tirar proveito das capacidades da câmara fotográfica presente nos dispositivos. Por exemplo, com um simples botão na nossa aplicação invocamos a aplicação built in do sistema para tirar uma foto ou um vídeo e podemos logo de seguida efectuar o tratamento ou apresentação da mesma.

    XAML

    <Button Name="ButtonCamera" Content="Tirar foto"
    VerticalAlignment="Bottom" Click="ButtonCamera_Click"
    Height="79" Margin="0,0,0,10" />
    <Image Height="400" x:Name="ContainerImagem" />

    CODE

    private void ButtonCamera_Click(object sender, RoutedEventArgs e)
    {
    // Chooser.
    CameraCaptureTask cameraCaptureTask = new CameraCaptureTask();
    cameraCaptureTask.Completed += new EventHandler<PhotoResult>(cameraCaptureTask_Completed);
    // Lançamento do objecto.
    cameraCaptureTask.Show();
    }
    void cameraCaptureTask_Completed(object sender, PhotoResult e)
    {
    if (e.TaskResult == TaskResult.OK)
    {
    //simply use the picture.
    BitmapImage bitmapImage = new BitmapImage();
    bitmapImage.SetSource(e.ChosenPhoto);
    ContainerImagem.Source = bitmapImage;
    }
    }

    De notar neste exemplo, que declaramos o evento cameraCaptureTask.Completed, o que faz com que após o utilizador tirar a foto um evento é lançado na nossa aplicação com o resultado que neste caso corresponde a uma foto.

    Nesse evento apenas aplicamos a foto a um BitmapImage (using System.Windows.Media.Imaging;) e após este passo atribuímos a imagem ao controlo de imagem ContainerImagem para conseguirmos visualizar o resultado.

    Nota: Caso estejam a utilizar o emulador, a câmara é substituída por uma Webcam instalada no vosso sistema para que seja mais fácil testar a nossa aplicação.

    Estes são apenas alguns exemplos de como utilizar Launcher e Choosers, para uma referência completa de todos os métodos existentes podem aceder à ajuda do namespace tasks em namespace Microsoft.Phone.Tasks

    Para terminar vamos verificar como utilizar um componente muito em voga nos dispositivos mais actuais e que pode marcar a diferença nas vossas aplicações.

    Acelerómetro

    Resumindo, não passa de um sensor que consegue detectar alterações à posição actual do dispositivo normalmente em 3 eixos, x,y e z.

    A utilização deste tipo de sensores pode ser bastante interessante no âmbito de utilização da nossa aplicação, um dos exemplos mais típicos é por exemplo mudar a música em execução com um shake ao dispositivo.

    Vamos ver um exemplo.

    XAML

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  Background="Transparent">
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50" />
    <ColumnDefinition Width="50" />
    <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition Height="50" />
    <RowDefinition Height="50" />
    <RowDefinition Height="50" />
    <RowDefinition Height="618*" />
    </Grid.RowDefinitions>   <TextBlock Grid.Column="1" Grid.Row="0" Text="X" />
    <TextBlock x:Name="txt_x"  Grid.Column="2" Grid.Row="0"/>
    <TextBlock Grid.Column="1" Grid.Row="1" Text="Y" />
    <TextBlock x:Name="txt_y"   Grid.Column="2" Grid.Row="1"/>
    <TextBlock Grid.Column="1" Grid.Row="2" Text="Z" />
    <TextBlock  x:Name="txt_z"  Grid.Column="2" Grid.Row="2"/>
    <Button Content="Iniciar" x:Name="btnIniciar" Grid.Column="2" Margin="50,35,129,494" Grid.Row="3" Click="btnIniciar_Click" />
    </Grid>

    CODE

    // Construtor
    Accelerometer accelerometer = new Accelerometer();
    public MainPage()
    {
    InitializeComponent();
    }   private void btnIniciar_Click(object sender, RoutedEventArgs e)
    {
    accelerometer.Start();
    accelerometer.ReadingChanged += new EventHandler<AccelerometerReadingEventArgs>(accelerometer_ReadingChanged);
    }   void accelerometer_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
    {
    Deployment.Current.Dispatcher.BeginInvoke(() => ProcessAccelerometerReading(e));
    }   private void ProcessAccelerometerReading(AccelerometerReadingEventArgs e)
    {
    // Actualiza os controlos
    txt_x.Text = e.X.ToString("0.00");
    txt_y.Text = e.Y.ToString("0.00");
    txt_z.Text = e.Z.ToString("0.00");
    }

    Neste exemplo, colocamos algumas caixas de texto numa página e um botão para que o sistema inicie a captura dos dados do acelerómetro.

    Quando clicamos no botão o sistema inicia a captura dos dados relativos à sua posição, x,y e z e no evento accelerometer_ReadingChanged delegamos o objecto AccelerometerReadingEventArgs e para a função ProcessAccelerometerReading que por sua vez trata de preencher as caixas de texto com os dados da posição do dispositivo.

    Fazemos esta delegação, visto o processo de captura de dados estar a executar numa thread extra, e nestes casos não conseguimos efectuar o binding directo dessa thread à nossa camada de UI (caixas de texto).

    Executando o projecto no dispositivo podemos observar a posição actual do mesmo sendo reflectiva nas caixas de texto no ecrã.

    Espero que esta breve introdução à utilização dos recursos que são disponibilizados pelos dispositivos vos tenha dado algumas ideias para as vossas aplicações.

    Uma vez mais, caso tenham alguma questão não hesitem em enviar mensagem.

    Até à próxima e boa programação em Windows Phone 7.

    Artigos relacionados: