Professional Documents
Culture Documents
Ian F. Darwin
Novatec
Authorized Portuguese translation of the English edition of titled Android Cookbook, First Edition ISBN
9781449388416 2012 OReilly Media Inc. This translation is published and sold by permission of O'Reilly
Media, Inc., the owner of all rights to publish and sell the same.
Traduo em portugus autorizada da edio em ingls da obra Android Cookbook, First Edition ISBN
9781449388416 2012 OReilly Media Inc. Esta traduo publicada e vendida com a permisso da O'Reilly
Media, Inc., detentora de todos os direitos para publicao e venda desta obra.
Novatec Editora Ltda. 2012.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998.
proibida a reproduo desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito,
do autor e da Editora.
Editor: Rubens Prates
Traduo: Rafael Zanolli
Reviso tcnica: Edgard Damiani
Reviso gramatical: Giacomo Leone Neto
Editorao eletrnica: Carolina Kuwabata
ISBN: 978-85-7522-323-9
Histrico de impresses:
Setembro/2012
Primeira edio
12-11335
CDD-005.26
ndices para catlogo sistemtico:
1. Android : Plataforma de desenvolvimento para
aplicativos mveis : Programa de computador
005.26
OG20120918
(CIP)
captulo 1
Primeiros passos
Discusso
O famoso padro Ol, mundo (Hello, world) surgiu quando Kernighan e Plaugher
quiseram escrever uma receita sobre como comear a utilizar qualquer nova linguagem e ambiente de programao. Este captulo carinhosamente dedicado a
esses nobres senhores, e a todos que j lutaram para dar seus primeiros passos em
qualquer novo paradigma de programao.
Problema
Aplicativos Android so escritos na linguagem de programao Java antes de serem
convertidos no formato de arquivo de classe prprio do Android, DEX. Se voc no
sabe como programar em Java, vai ter dificuldade em escrever aplicativos Android.
Soluo
Muitos recursos esto disponveis para aprender Java. A maioria deles ensinar o que
voc precisa, mas tambm mencionar algumas classes de API (Application Programming Interface) que no esto disponveis para o desenvolvimento Android. Evite
quaisquer sees em qualquer recurso que fale sobre os tpicos listados na coluna
esquerda da tabela 1.1.
Tabela 1.1 Componentes da API Java a ignorar
API Java
Swing, applets
Equivalente Android
GUI do Android; veja o captulo 7
23
24
Android Cookbook
API Java
Equivalente Android
Servlets/JSP, J2EE/Java EE
Discusso
Aqui esto livros e recursos sobre programao Java:
Java in a Nutshell (lanado no Brasil pela editora Bookman, com o ttulo Java: o
guia essencial) de David Flanagan (OReilly) uma boa introduo para programadores, especialmente queles que esto vindo de C/C++. Esse livro cresceu
muito em tamanho para acompanhar o crescimento do Java SE ao longo de
seu tempo de vida.
Head First Java (lanado no Brasil pela editora Starlin Alta, com o ttulo Use
a cabea! Java) de Kathy Sierra e Bert Bates (OReilly). Esse livro fornece uma
tima apresentao orientada ao aprendizado visual para essa linguagem.
Thinking in Java (em uma traduo livre, Pensando em Java) de Bruce Eckel
(Prentice-Hall).
Learning Java (lanado no Brasil pela editora Campus, com o ttulo Aprendendo
Java) de Patrick Niemeyer e Jonathan Knudsen (OReilly).
Great Java: Level 1 (em uma traduo livre, Java excelente: nvel 1), um vdeo
feito por Brett McLaughlin (OReilly). Esse vdeo fornece uma apresentao
visual para a linguagem.
Java: The Good Parts (lanado no Brasil pela editora Campus, com o ttulo O
melhor do Java) de Jim Waldo (OReilly).
Java Cookbook, o qual eu escrevi e a OReilly publicou. Esse livro tido como
um bom segundo livro para desenvolvedores Java. Ele tem captulos completos
sobre strings, expresses regulares, nmeros, data e hora, estruturas de dados,
E/S e diretrios, internacionalizao, threads, e redes, todo temas que se aplicam
ao Android. Ele tambm tem vrios captulos especficos para Swing e algumas
tecnologias com base em EE.
Entenda, por favor, que essa lista provavelmente nunca vai estar totalmente atualizada. Voc tambm deve consultar o Android Development Bibliography, da OReilly,
disponvel gratuitamente para download (mediante registro), uma compilao de
todos os livros de vrias editoras cujos livros esto no servio online Safari. Esse livro
tambm distribudo sem custos em conferncias relevantes nas quais a OReilly
tem um estande.
25
Veja tambm
O autor principal deste livro mantm uma lista online de recursos Java em http://
www.darwinsys.com/java/.
A OReilly tem alguns dos melhores livros Java do mercado; veja uma lista completa
em http://oreilly.com/pub/topic/java.
Problema
Voc deseja criar um novo projeto Android sem utilizar o plugin ADT do Eclipse.
Soluo
Utilize a ferramenta android do kit de desenvolvimento do Android (Android Development Kit, ou ADK) com o argumento create project e alguns argumentos adicionais
para configurar seu projeto.
Discusso
Alm de ser o nome da plataforma, android tambm o nome de uma ferramenta de
linha de comando para criao, atualizao e gerenciamento de projetos. Voc pode
navegar at o diretrio android-sdk-xxx, ou definir sua varivel PATH para incluir seu
subdiretrio tools.
Depois, para criar um novo projeto, utilize o comando android create project com alguns
argumentos. O exemplo 1.1 um exemplo executado em MS-DOS.
26
Android Cookbook
Added file C:\Documents and Settings\Ian\My Documents\MyAndroid\res\values\strings.xml
Created directory C:\Documents and Settings\Ian\My Documents\MyAndroid\res\layout
Added file C:\Documents and Settings\Ian\My Documents\MyAndroid\res\layout\main.xml
Added file C:\Documents and Settings\Ian\My Documents\MyAndroid\AndroidManifest.xml
Added file C:\Documents and Settings\Ian\My Documents\MyAndroid\build.xml
C:>
Significado
Exemplo
--activity
--name
--name MyProject
--package
--package com.example.hello
--path
--target
--path /home/ian/workspace/MyProject
--target android-10
Significado
AndroidManifest.xml
bin
build.properties
build.xml
Elementos gerados
libs
Bibliotecas, claro
res
src
27
Significado
src/packagename/ActivityName.java
test
Supondo que voc tenha a ferramenta Ant Build Tool da Apache Software Foundation
instalada (e ela est includa em verses recentes do SDK do Android), voc pode
(em uma janela de linha de comando) ir at o diretrio do projeto (...MyDocuments\
MyAndroid no exemplo 1.1) e utilizar o comando:
ant debug
Isso vai criar um arquivo chamado, por exemplo, MyAndroid.apk (com apk representando Android Package) no diretrio bin.
Se esta sua primeira vez aqui, voc pode ter de criar um dispositivo virtual Android
(Android Virtual Device, ou AVD), que simplesmente uma configurao nomeada
28
Android Cookbook
Presumindo que agora voc tenha o emulador sendo executado ou seu dispositivo
conectado e reconhecido via USB, voc pode fazer:
adb -e install -r bin/MyAndroid.apk
Veja tambm
Receita 1.4. O blog a little madness tem uma formulao mais detalhada. O site
oficial de referncia do Android tem uma pgina sobre desenvolvimento sem Eclipse.
Problema
Voc quer utilizar o Eclipse para desenvolver seu aplicativo Android.
Soluo
Instale o Eclipse, o SDK (Software Development Kit) do Android e o plugin ADT
(Android Development Tools). Crie seu projeto e comece a escrever seu aplicativo.
Compile e teste esse aplicativo no emulador, dentro do Eclipse.
29
Discusso
Assim que tiver estes itens instalados, voc estar pronto para iniciar:
O IDE Eclipse
O SDK do Android
O plugin ADT
Se voc quiser uma explicao mais detalhada da instalao desses trs itens, por
favor, consulte a receita 1.5.
Para iniciar, crie um novo projeto a partir do menu File -> New (veja a figura 1.1).
Clique em Next. D um nome ao seu novo projeto e clique em Next (veja a figura 1.2).
Selecione uma verso de SDK como alvo. A verso 2.1 oferece para voc praticamente
todos os dispositivos atualmente em uso; as verses 3.x ou 4.x oferecem os ltimos
recursos (veja a figura 1.3). Voc decide.
A figura 1.4 mostra a estrutura do projeto expandida no painel Project direita. Ela
tambm mostra a que ponto voc pode chegar na utilizao do recurso de preenchimento automtico do Eclipse dentro do Android eu inclu o atributo gravity para o
rtulo, e o Eclipse est oferecendo uma lista completa de valores de atributos possveis. Eu escolhi center-horizontal, por isso o rtulo dever estar centralizado quando
colocarmos o aplicativo para funcionar.
30
Android Cookbook
31
32
Android Cookbook
Como sempre, o Eclipse gera uma verso compilada sempre que voc salva um arquivo-fonte. Alm disso, em um projeto Android, ele tambm executa uma compilao
Ant para criar o APK compilado e empacotado que estar pronto para ser executado.
Por isso voc precisa apenas execut-lo. Clique com o boto direito no projeto em si
e selecione Run As -> Android Project (veja a figura 1.5.).
Veja tambm
Receita 1.3.
33
Problema
Voc deseja desenvolver seus aplicativos Android utilizando um PC Windows, por
isso um guia conciso da configurao de um IDE para essa plataforma seria til.
34
Android Cookbook
Soluo
O uso do IDE Eclipse recomendado no desenvolvimento de aplicativos Android.
Configurar o Eclipse no Windows no uma instalao com um nico passo; vrios
estgios precisam ser completados. Esta receita fornece detalhes sobre esses estgios.
Discusso
No desenvolvimento de aplicativos para Android, o IDE (Integrated Development
Environment) Eclipse para Java recomendado. O plugin ADT (Android Development
Tools) est disponvel para aprimorar o Eclipse, o qual utiliza o SDK do Android,
fornecendo programas essenciais para desenvolvimento de software para o Android.
Para configurar um ambiente de desenvolvimento, voc precisa efetuar o download
e a instalao destes componentes:
Java Standard Edition Development Kit
Eclipse para desenvolvimento Java
SDK do Android
plugin ADT (dentro do Eclipse)
Nas subsees a seguir abordaremos esses estgios detalhadamente para um PC
Windows (testado em XP, Vista e Windows 7).
A lista de downloads do JDK ser mostrada. Clique no boto de opo Accept License
Agreement; do contrrio, voc no poder continuar. Faa o download e execute o JDK
mais recente presente; quando da elaborao deste texto, eles eram o jdk-7u2-windows-i586.exe (ou o jdk-7u2-windows-x64.exe para o Windows 64 bits). Voc pode precisar
selecionar a localizao do site de download. Aceite quaisquer avisos de segurana
que apaream, mas apenas se voc estiver efetuando o download na pgina oficial
de downloads do Java.
35
Quando o download tiver terminado e for executado, voc ter de percorrer as telas
de instalao, clicando Next at que o instalador do JDK tenha concludo. Voc no
deve ter de alterar nenhuma das opes apresentadas. Quando o instalador do JDK
tiver concludo, clique no boto Finish. Pode ser que uma pgina de registro de produto
seja carregada; voc pode fech-la ou escolher registrar sua instalao.
Faa o download e abra o arquivo ZIP. No arquivo haver um diretrio eclipse contendo vrios arquivos e subdiretrios. Copie o diretrio eclipse e todo o seu contedo
como fornecido (Figura 1.9). O local habitual para o qual copiar os arquivos na raiz
do drive C ou dentro de C:\Arquivos de Programas. Voc pode ter de selecionar Continuar
quando o Windows pedir permisso para a cpia.
Crie um atalho de desktop para eclipse.exe.
36
Android Cookbook
Execute o Eclipse para que ele configure um workspace (espao de trabalho); fazer
isso tambm verificar que tanto o Java quanto o Eclipse foram instalados corretamente. Quando voc executar o Eclipse, pode ser que um aviso de segurana seja
mostrado; selecione Run para continuar. Aceite a localizao padro do workspace ou
utilize um diretrio diferente.
37
Android Support
Utilizado para oferecer suporte a APIs Android mais recentes em dispositivos
mais antigos.
Analytics SDK
Para oferecer suporte anlise das compras de clientes.
Market Billing
Acrescenta suporte para compras dentro do aplicativo.
Market Licensing
Ajuda a proteger aplicativos de serem ilegalmente copiados.
USB Driver
Para depurao em dispositivos fsicos (ou utilizando um driver do fabricante).
Webdriver
Ajuda a testar a compatibilidade de um site com o navegador Android.
Figura 1.10 Android SDK Manager, mostrando componentes instalados e disponveis para download.
38
Android Cookbook
Clique no boto Add. Uma tela Add Repository aparecer; na caixa Name digite algo significativo, como ADT plug-in (o endereo web mencionado antes ser mostrado na
caixa Location); veja a figura 1.11.
Clique no boto OK. A tela ser atualizada depois de brevemente mostrar Pending
na coluna Name da tabela.
Marque a caixa ao lado de Developer Tools. Ento, selecione o boto Next na parte inferior
da tela (veja figura 1.12).
39
Uma lista de itens a serem instalados ser mostrada. Se voc receber uma mensagem
de erro, verifique se o Eclipse foi executado na conta do administrador. Selecione Next
novamente. Uma tela mostrar as licenas; certifique-se de que cada licena tenha
sido aceita (selecione o boto de opo I accept the terms of the license agreements).
Ento clique no boto Finish. Um aviso de segurana ter de ser aceito para concluir
a instalao; selecione OK para esse aviso (o endereo digitado antes um endereo
seguro). O Eclipse pedir uma reinicializao. Selecione o boto Restart Now e o Eclipse
vai fechar e recarregar. Uma caixa de dilogo Welcome to Android Development
vai aparecer. Defina a localizao do SDK na caixa Existing Location (uma vez que o SDK
Manager j foi executado), v at a pasta do SDK do Android (por padro, C:\Arquivos
de Programas\Android\android-sdk), e clique em Next (veja a figura 1.13).
Uma pergunta de monitoramento de uso do Google Android SDK vai aparecer; modifique a opo se necessrio e clique em Finish. O Eclipse estar agora configurado
para compilar e depurar aplicativos Android. Veja a receita 3.3 para configurar um
emulador Android; depois experimente a receita 1.4 como um teste de sanidade. Conecte um dispositivo fsico no computador e utilize suas configuraes para ativar o
USB Debugging (em Development, dentro de Applications).
Veja tambm
Receita 1.4; Receita 1.12; Receita 3.3; http://developer.android.com/sdk/installing.html, http://
www.eclipse.org/; http://www.oracle.com/technetwork/java/javase/downloads/index.html.
40
Android Cookbook
41
Problema
Aplicativos Android no tm um mtodo main; voc precisa aprender como eles
comeam e como param ou so parados.
Soluo
A classe android.Activity fornece vrios mtodos de ciclo de vida bem definidos que
so chamados quando um aplicativo iniciado, suspenso, reiniciado e assim por
diante, assim como um mtodo que voc pode chamar para marcar uma atividade
como concluda.
Discusso
Seu aplicativo Android executa seu prprio processo Unix, por isso, em geral, ele no
pode afetar diretamente nenhum outro aplicativo em execuo. A VM Dalvik faz a
interface com o sistema operacional para chamar voc quando seu aplicativo inicia,
quando o usurio muda para outro aplicativo e assim por diante. H um ciclo de
vida bem definido para aplicativos Android.
Um aplicativo Android tem trs estados em que pode estar:
Ativo, no qual o aplicativo est visvel para o usurio e em execuo.
Pausado, no qual o aplicativo est parcialmente obscurecido e perdeu o foco
de entrada.
Parado, no qual o aplicativo est completamente oculto da viso.
Seu aplicativo percorrer esses estados quando o Android chamar os mtodos a seguir
na atividade atual, no momento apropriado:
void
void
void
void
void
void
void
onCreate(Bundle savedInstanceState)
onStart()
onResume()
onRestart()
onPause()
onStop()
onDestroy()
Voc pode ver o diagrama de estado desse ciclo de vida na figura 1.14.
No caso da primeira atividade de um aplicativo, onCreate() a forma como voc sabe
que o aplicativo foi iniciado. aqui que voc normalmente realiza trabalhos de tipo
42
Android Cookbook
(new)
onStart()
Running
onPause()
onResume()
Paused
onStop()
onResume()
onStop()
onDestroy()
Stopped
onDestroy()
(no process)
Figura 1.14 Estados de ciclo de vida do Android.
Voc pode ver os efeitos dos vrios mtodos de ciclo de vida criando um projeto de
teste no Eclipse e sobrescrevendo todos os mtodos utilizando instrues de log para
fins de depurao.
Problema
Voc tem um arquivo .apk de um aplicativo, e deseja instal-lo no emulador para conferir esse aplicativo, ou porque um aplicativo que voc est desenvolvendo o requer.
Soluo
Utilize a ferramenta de linha de comando ADB para instalar o arquivo .apk no emulador em execuo; voc tambm pode utilizar essa ferramenta para instalar um
arquivo .apk em um dispositivo Android conectado.
43
Discusso
Para instalar o arquivo .apk, siga estes passos:
1. Encontre o local em sua mquina onde voc instalou o SDK do Android. No
diretrio do SDK do Android, v at o diretrio tools.
2. Procure um executvel chamado adb no diretrio tools. Se ele estiver presente,
essa a localizao do arquivo adb; do contrrio, deve haver um arquivo .txt
chamado adb has moved. O contedo desse arquivo meramente direciona
voc para a localizao do binrio do adb; o arquivo afirma que o adb est
presente no diretrio platform-tools em vez de estar no diretrio tools.
3. Assim que voc tiver localizado o programa adb, use o comando cd para chegar
a essa localizao em um terminal (Linux) ou prompt de comando (Windows).
4. Utilize o comando adb install localizao do .apk que voc deseja instalar. Se voc
receber command not found no Linux, tente utilizar ./adb em vez de apenas
adb.
Isso deve iniciar a instalao no dispositivo que est atualmente sendo executado
(seja um emulador em execuo em seu desktop, ou um dispositivo fsico Android
conectado).
Depois de a instalao terminar, no menu do dispositivo/emulador Android, voc
deve ver o cone do aplicativo que acabou de instalar (veja a figura 1.15).
44
Android Cookbook
Problema
As app stores (em uma traduo livre, lojas de aplicativos) so uma enorme parte
da atrao dos smartphones modernos. O Android Market1 do Google a app store
oficial, mas voc tambm pode querer utilizar outras.
Soluo
A SlideMe LLC oferece uma app store alternativa. A app store SlideME permite que
voc instale outros aplicativos (talvez voc queira integrar com outros aplicativos),
bem como que voc teste a experincia de publicar e efetuar o download de seus
prprios aplicativos em seu dispositivo emulado Android. A SlideME tambm alcana
muitos usurios Android que esto fora do Android Market, incluindo pessoas com
dispositivos no suportados e aqueles que no vivem em um pas onde h suporte
do Android Market.
Discusso
Uma alternativa ao Android Market oficial a SlideME, uma app store alternativa. A
SlideME pode no ter tantos aplicativos quanto o Android Market do Google, mas
tem algumas vantagens, incluindo o fato de que funciona facilmente em um dispositivo Android emulado.
V at o site da SlideME utilizando seu dispositivo Android emulado, navegue ou
busque aplicativos e clique em um aplicativo gratuito. Depois de uma pausa para
download do aplicativo, abra o download (a pequena seta no canto superior esquerdo),
revise a licena e inicie o arquivo .apk do qual voc efetuou o download para instalar
o aplicativo. Durante a instalao, ser pedido que voc revise e aceite a licena para
o software.
Assim que o aplicativo da SlideME tiver sido instalado, voc poder percorrer o
catlogo e instalar mais aplicativos sem utilizar o navegador. Isso muito mais fcil
do que utilizar um navegador web para efetuar o download dos aplicativos, j que
a apresentao projetada para o dispositivo Android; simplesmente escolha uma
categoria, navegue dentro dela, e escolha um aplicativo para instalar. Eu tive alguns
problemas de estabilidade utilizando o aplicativo em meu emulador ele congelou
em alguns casos , mas fui capaz de instalar alguns aplicativos bsicos gratuitos,
como o Grocery List.
1 N.T.: Android Market era o nome anterior da loja de aplicativos do Google, que hoje, unificada
s lojas de msica, filmes e livros, chamada de Google Play (fonte: Wikipdia).
45
Veja tambm
A SlideME tambm permite que voc publique seus aplicativos em sua app store; veja
a pgina Applications no site da SlideME.
Para informaes sobre o desenvolvimento de aplicativos para a SlideME, consulte
http://slideme.org/developers.
Problema
Voc deseja utilizar uma classe de outro projeto, mas no quer copiar e colar.
Soluo
Inclua o projeto como um projeto referenciado, e o Eclipse (e o DEX) cuidaro do
trabalho.
Discusso
Voc muitas vezes precisa reutilizar classes de outro projeto. Em meu programa de
monitoramento GPS, o JPSTrack, a verso do Android empresta classes como o mdulo de I/O de arquivos da verso Java SE. Voc certamente no deseja copiar e colar
classes inalteradas de um projeto para outro, pois isso torna a manuteno improvvel.
No caso mais simples, quando o projeto de biblioteca contm o cdigo-fonte das
classes que voc deseja importar, tudo que voc tem de fazer declarar o projeto que
contm as classes necessrias (a verso Java SE neste caso) como um projeto referenciado no path de compilao. Selecione Project->Properties->Java Build Path, selecione Projects,
e clique em Add. Na figura 1.16, eu estou incluindo o projeto SE jpstrack como uma
dependncia no projeto Android jpstrack.android.
2 N.T.: O rooting um processo que permite a usurios de smartphones, tablets, e outros dispositivos que executam o sistema operacional Android, obter controle privilegiado (conhecido como
acesso raiz) dentro do subsistema do Android (fonte: Wikipdia).
46
Android Cookbook
Desenvolvedores mveis que tambm criam aplicativos para outras plataformas devem notar que essa tcnica no funciona se voc tem o plugin BlackBerry Java atual
(do final de 2011) instalado em sua instalao Eclipse. Esse um bug no plugin BlackBerry Java; ele sinaliza incorretamente at mesmo projetos no BlackBerry como
dependentes de projetos de biblioteca no BlackBerry, e marca o projeto como tendo
um erro, o que impede a gerao e execuo correta do cdigo. Remova o plugin
defeituoso ou coloque-o em uma instalao separada do Eclipse.
Como alternativa, crie um arquivo JAR utilizando o Ant ou o assistente do Eclipse.
Faa com que o outro projeto referencie esse arquivo como um JAR externo nas
configuraes do classpath. Ou copie fisicamente este arquivo para o diretrio libs e
faa referncia a ele a partir desse local.
Um mtodo mais novo que frequentemente mais confivel, e agora oficialmente
recomendado, mas til apenas se ambos os projetos forem projetos Android, declarar o projeto de biblioteca como tal na guia Project->Properties->Android->Library (marque
o boto Is Library), e utilizar o boto Add no outro projeto, na mesma tela, para listar o
projeto de biblioteca como uma dependncia do projeto principal (veja a figura 1.17).
Para fs da linha de comando, o primeiro mtodo envolve a edio do arquivo .classpath, enquanto o segundo simplesmente cria entradas no arquivo project.properties,
por exemplo:
47
# Projeto alvo
target=android-7
android.library=false
android.library.reference.1=../wheel
Veja tambm
Consulte a documentao oficial sobre projetos de biblioteca.
Problema
Voc precisa referenciar uma biblioteca externa em seu cdigo-fonte.
48
Android Cookbook
Soluo
Obtenha o arquivo JAR da biblioteca requerida e inclua-o em seu projeto.
Discusso
Como exemplo, voc pode ter de utilizar o AndroidPlot, uma biblioteca para representao de diagramas e grficos em seu aplicativo, ou o OpenStreetMap, um projeto
wiki que cria e fornece dados e mapeamento geogrficos gratuitos. Se afirmativo, seu
aplicativo precisa referenciar essas bibliotecas. Voc pode fazer isso no Eclipse em
poucos passos simples:
1. Efetue o download do arquivo JAR correspondente biblioteca que voc deseja
utilizar.
2. Depois de criar seu projeto Android no Eclipse, clique com o boto direito
sobre o nome do projeto e selecione Properties no menu (Figura 1.18).
3. Na lista do lado esquerdo, selecione Java Build Path e clique na guia Libraries.
4. Clique no boto Add External JARs.
5. Fornea o local onde voc efetuou o download do arquivo JAR da biblioteca
que voc deseja utilizar.
49
Nesse ponto, voc ver um diretrio Referenced Libraries em seu projeto. Os JARs que
voc incluiu vo aparecer (veja a figura 1.19).
Uma abordagem alternativa criar uma pasta lib em seu projeto, copiar fisicamente os
arquivos JAR para ela e inclu-los individualmente como voc fez antes, mas, em vez
disso, clicando no boto Add JARs. Isso mantm tudo em um lugar s (especialmente
se seu projeto for compartilhado por meio de um sistema de controle de verso com
outros que podem utilizar um sistema operacional diferente e incapaz de utilizar os
JARs externos no mesmo local). No entanto, isso eleva o fardo de responsabilidade para
questes de licenciamento referentes aos arquivos JAR includos (veja a figura 1.20).
50
Android Cookbook
Problema
s vezes difcil codificar determinada funcionalidade, especialmente quando a
documentao imprecisa ou no fornece nenhum exemplo.
Soluo
Analisar cdigos funcionais j existentes vai ajudar. O SDK do Android tem programas
de exemplo que voc pode destrinchar para ver como funcionam.
Discusso
O SDK do Android vem com vrios aplicativos de exemplo que podem ser teis
quando voc estiver tentando codificar alguma funcionalidade. Analisar o cdigo do
exemplo pode ser esclarecedor. Assim que voc tiver instalado o SDK do Android,
vrios exemplos se tornaro disponveis:
51
Accelerometer Play
Accessibility Service
API Demos
Backup and Restore
Bluetooth Chat
Business Card
Contact Manager
Cube Live Wallpaper
Home
Honeycomb Gallery
JetBoy
Lunar Lander
Multiple Resolutions
Near Field Communication
Note Pad
RenderScript
Sample Sync Adapter
Searchable Dictionary
Session Initiation Protocol
Snake
Soft Keyboard
Spinner
SpinnerTest
StackView Widget
TicTacToeLib
TicTacToeMain
USB
Wiktionary
Wiktionary (Simplified)
Weather List Widget
XML Adapters
Para abrir um projeto de exemplo a partir do Eclipse, abra o menu File e ento selecione Android Project (veja a figura 1.21).
52
Android Cookbook
No dilogo New Android Project, selecione a opo Create project from existing sample. Clique em
Next e selecione o alvo de compilao. Uma lista de exemplos disponveis para o alvo
selecionado ser mostrada. Se o exemplo necessrio no for mostrado, volte e selecione
outro alvo de compilao. (O exemplo pode no estar instalado; o SDK Manager pode
ser utilizado para instalar exemplos adicionais se eles estiverem faltando durante o
setup do SDK.) Escolha o exemplo a ser carregado, clique em Finish, e o exemplo ser
copiado para o Workspace e compilado (com o progresso mostrado na barra de status).
Depois de pouco tempo o exemplo estar pronto para ser executado e voc ser capaz
de explorar o cdigo-fonte para ver como tudo feito.
Se os exemplos foram movidos do diretrio samples do SDK, utilize a opo Create
project from existing source no dilogo New Android Project para abrir o exemplo.
Quando o exemplo for executado pela primeira vez, selecione Android Application no
dilogo Run As que deve aparecer. Tambm pode ser necessrio configurar um AVD
apropriado para executar o exemplo (veja a receita 3.3). Veja a figura 1.22.
53
Veja tambm
O site Android Developers em http://developer.android.com/index.html; este cookbook,
claro.
Voc tambm pode pesquisar a Web em busca de programas ou exemplos adicionais.
Se voc ainda no conseguiu encontrar o que precisa, pode buscar ajuda no Stack
Overflow (http://www.stackoverflow.com; utilize android como tag) ou no canal IRC
(Internet Relay Chat) #androiddev no freenode.
Problema
O SDK deve ser mantido atualizado para permitir que desenvolvedores de aplicativos
trabalhem com as APIs mais recentes na plataforma Android que est sempre em
evoluo.
Soluo
Utilize o programa Android SDK Manager para atualizar os pacotes SDK instalados
existentes e instalar novos pacotes SDK. Isso inclui pacotes de terceiros para funcionalidades de dispositivos especficos.
Discusso
O sistema operacional (SO) Android est evoluindo constantemente, e, portanto, o
mesmo vale para o SDK do Android. O desenvolvimento constante do Android
motivado por estes fatores:
A pesquisa e desenvolvimento do Google.
Fabricantes de telefones estarem sempre desenvolvendo dispositivos novos e
melhorados.
A resoluo de problemas de segurana e possveis exploits3.
A necessidade do suporte a novos dispositivos (por exemplo, o suporte a dispositivos tablet foi includo com a verso 3.0).
O suporte a novas interfaces de hardware (por exemplo, o suporte a comunicao de campo prximo foi includo na verso 2.3).
A correo de bugs.
3 N.T.: Um exploit, em segurana da informao, um programa de computador, ou uma sequncia
de comandos que aproveita das vulnerabilidades de um sistema computacional (fonte: Wikipdia).
54
Android Cookbook
Atualizaes disponveis sero mostradas em uma lista (assim como pacotes opcionais
disponveis). Se uma atualizao ou um pacote tiver termos de licena que requerem
aceitao eles sero mostrados com um ponto de interrogao. Destaque cada pacote
que tem um ponto de interrogao para ler os termos de licena. Voc pode aceitar
ou rejeitar o pacote utilizando os botes de opo. Pacotes rejeitados sero marcados
com um vermelho (veja a figura 1.24).
55
Como alternativa, clique em Accept All para aceitar tudo que estiver disponvel. Todos
os pacotes e atualizaes que estiverem disponveis para download e instalao sero
mostrados com um sinal de visto verde.
Clique no boto Install para comear o download e a instalao; quando concludo,
clique no boto Close (veja a figura 1.25).
Se o prprio programa SDK Manager tiver sido atualizado, voc ver uma mensagem
pedindo que reinicie o programa (veja a figura 1.26).
O SDK Manager tambm utilizado para download de pacotes adicionais que no
so parte da plataforma padro. Esse mecanismo utilizado por fabricantes de dispositivos para fornecer suporte a seus prprios hardwares. Por exemplo, a LG Electronics
fornece um dispositivo 3D e, para oferecer suporte capacidade 3D em aplicativos,
um pacote adicional fornecido. Ele tambm utilizado pelo Google para permitir
o download de APIs opcionais.
56
Android Cookbook
57
Voc pode ter de dar permisso para alterar os atributos (veja a figura 1.30).
58
Android Cookbook
Feche o ADB antes de atualizar. Uma mensagem pedindo que voc reinicie o ADB (o Android Debugger) pode aparecer (Figura 1.32).
Idealmente, melhor executar o SDK Manager sem que o ADB esteja sendo executado,
e ele no deve estar sendo executado se o Windows tiver acabado de iniciar. Como
alternativa voc pode utilizar o Gerenciador de Tarefas do Windows para interromper o adb.exe. Se o ADB no estava sendo executado, responda No a esse prompt; do
contrrio, responda Yes.
59
Para solucionar esse erro, certifique-se de que todos os programas esto fechados
(inclusive o adb.exe). Depois copie o SDK Manager.exe de C:\Arquivos de Programas\
Android\android-sdk\tools\lib para C:\Arquivos de Programas\Android\android-sdk (ou
onde quer que o SDK esteja instalado). Ento execute novamente o SDK Manager
(veja a figura 1.32).
Atualizao do Eclipse. Depois que voc atualizar o SDK e abrir o Eclipse, uma mensagem
de erro pode aparecer (veja a figura 1.34).
No Eclipse, selecione Help e ento Check for Updates. Espere at que o dilogo de progresso
termine e as atualizaes do Android Eclipse sejam mostradas. Clique em Next duas
vezes, e aceite os termos de licena. Ento, clique em Finish para comear o processo
de download e atualizao. Uma mensagem de aviso sobre contedo no assinado
pode aparecer. Clique em OK para aceitar o aviso (faa isso apenas se voc estiver
atualizando via Eclipse). Reinicie o Eclipse assim que a atualizao estiver concluda
(uma mensagem para isso vai aparecer).
Mais informaes sobre a resoluo de problemas do SDK Manager e do plugin do
Eclipse para Android esto disponveis no site Android Developers.
60
Android Cookbook
Veja tambm
Receita 1.5; Instalao do SDK; Incluso de componentes SDK; Plugin ADT para
Eclipse
Problema
Voc deseja obter uma captura de tela de um aplicativo executado em um dispositivo
Android.
Soluo
Utilize a funcionalidade Device Screen Capture da viso DDMS (Dalvik Debug
Monitor Server) no Eclipse.
Discusso
Para utilizar a funcionalidade Device Screen Capture siga estes passos:
1. Execute o aplicativo no Eclipse e v at a viso DDMS (Window menu->Open Perspective->Other->DDMS) ou Window menu->Show View->Other->Android->Devices; a primeira
mostrada na figura 1.36). Note que a linha que diz Resourcedoes not exist
aparece na figura 1.35 apenas porque outro projeto Eclipse foi fechado, e no
afeta os passos listados aqui.
61
62
Android Cookbook
Veja tambm
Algumas distribuies fornecem modos alternativos de se obter capturas de tela.
O CyanogenMod 7.x fornece uma captura de tela no menu que surge quando voc
segura pressionado o boto de ligar/desligar. Alguns tablets HTC com suporte a
caneta oferecem capturas de tela no menu Pen. O Ice Cream Sandwich (Android 4.0)
fornece um mecanismo integrado para captura de tela em dispositivos reais: basta
pressionar o controle de diminuio de volume ao mesmo tempo em que o boto
de ligar/desligar e a imagem sero salvos em seu dispositivo e poder ser visualizada
no aplicativo de galeria.
Problema
Voc deseja um simples timer regressivo, um programa que far uma contagem regressiva a partir de um determinado nmero de segundos at atingir zero.
Soluo
O Android vem com uma classe integrada para construo de CountDownTimers. Ela
fcil de utilizar, eficiente e funciona (isso nem precisa dizer!).
Discusso
Os passos para fornecer um timer regressivo so estes:
1. Crie uma subclasse de CountDownTimer. O construtor dessa classe recebe dois
argumentos, CountDownTimer(long millisInFuture, long countDownInterval). O primeiro o nmero de milissegundos, contados a partir de agora, determinando
quando o intervalo deve estar concludo; nesse ponto o mtodo onFinish()
da subclasse ser chamado. O segundo a frequncia em milissegundos da
regularidade em que voc deseja ser notificado de que o timer ainda est em
execuo, normalmente para atualizar um monitor de progresso ou comunicar
o usurio de outra forma. O mtodo onTick() de sua subclasse ser chamado a
cada passagem desse nmero de milissegundos.
2. Substitua os mtodos onTick() e onFinish().
3. Instancie uma nova instncia em sua atividade Android.
4. Chame o mtodo start() na nova instncia criada!
63
64
Android Cookbook
import
import
import
import
import
android.os.CountDownTimer;
android.view.View;
android.view.View.OnClickListener;
android.widget.Button;
android.widget.TextView;
public
{
MalibuCountDownTimer countDownTimer;
long timeElapsed;
boolean timerHasStarted = false;
Button startB;
TextView text;
TextView timeElapsedView;
final long startTime = 50 * 1000;
final long interval = 1 * 1000;
65
66
Android Cookbook
Problema
Quando voc vai com amigos a um restaurante e deseja dividir a conta e a gorjeta,
pode se envolver em muitos clculos manuais e controvrsias. Em vez disso, voc
deseja utilizar um aplicativo que permita que voc simplesmente some o percentual
da gorjeta ao total e divida o valor pelo nmero de presentes. O Tipster uma implementao disso no Android, para mostrar um aplicativo completo.
Soluo
Este um exerccio simples que utiliza os elementos bsicos da GUI (graphical user
interface, ou interface grfica de usurio), combinando-os a alguns clculos simples
e a um cdigo de UI (user interface, ou interface de usurio) orientada a eventos para
reunir todos os elementos. Ns utilizaremos os seguintes componentes de GUI:
TableLayout
Fornece controle adequado sobre o layout da tela. Esse layout permite que voc
utilize o paradigma da tag HTML Table para posicionar os widgets.
TableRow
67
Button
Ns utilizaremos uma View para criar um separador visual com certos atributos
de altura e cor.
Discusso
O Android utiliza arquivos XML para o layout de widgets. Em nosso projeto de
exemplo, o plugin do Android para Eclipse gera um arquivo main.xml para o layout.
Esse arquivo tem as definies XML dos vrios widgets e de seus contineres.
H um arquivo strings.xml que tem todos os recursos de strings utilizados no aplicativo.
Um arquivo icon.png padro fornecido para o cone do aplicativo.
E h tambm o arquivo R.java que gerado automaticamente (e atualizado quando
quaisquer alteraes so feitas ao main.xml). Esse arquivo tem as constantes definidas
para cada layout e widget. No edite esse arquivo manualmente; o plugin far isso
para voc ao efetuar qualquer modificao em seus arquivos XML.
Em nosso exemplo temos Tipster.java como o arquivo Java principal para a Activity.
A receita 1.4, assim como diversos tutoriais do Google, mostra como utilizar o plugin.
Utilizando o plugin do Eclipse, crie um projeto Android chamado Tipster. O resultado
final ser um layout de projeto que se parecer com o da figura 1.39.
Fornece controle adequado sobre o layout da tela. Esse layout permite que voc
utilize o paradigma da tag HTML Table para posicionar os widgets.
TableRow
68
Android Cookbook
RadioGroup
Ns utilizaremos uma View para criar um separador visual com certos atributos
de altura e cor.
Familiarize-se com esses widgets j que voc vai utiliz-los bastante nos aplicativos que
construir. Ao verificar os Javadocs relacionados a layouts e widgets, d uma olhada
nos atributos XML. Isso vai ajud-lo a correlacionar o uso no arquivo de layout main.
xml e o cdigo Java (Tipster.java e R.java) onde eles so acessados.
Tambm est disponvel um editor visual de layout no ADT do Eclipse, bem como
uma ferramenta independente de UI chamada DroidDraw, ambas as quais permitem
que voc crie um layout arrastando e soltando widgets a partir de uma paleta, como
qualquer ferramenta de design de formulrios. No entanto, recomendo que voc crie o
layout mo em XML, pelo menos nos estgios iniciais de seu aprendizado Android.
Futuramente, medida que aprender todas as nuances da API de layout XML, voc
poder delegar essa tarefa a tais ferramentas.
O arquivo de layout, main.xml, tem as informaes de layout (veja o exemplo 1.6). Um
widget TableRow cria uma nica linha dentro do TableLayout. Por isso voc utiliza tantas
TableRows quanto for o nmero de linhas que deseja. Neste tutorial, vamos utilizar oito
TableRows cinco para os widgets at o separador visual abaixo dos botes, e trs para
a rea de resultados abaixo dos botes e do separador.
69
70
Android Cookbook
textfield para entrada de um percentual personalizado de gorjeta -->
<TableRow>
<RadioGroup
android:id="@+id/RadioGroupTips"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="0"
android:layout_span="3"
android:checkedButton="@+id/radioFifteen">
<RadioButton android:id="@+id/radioFifteen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rdoTxt15"
android:textSize="15sp" />
<RadioButton android:id="@+id/radioTwenty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rdoTxt20"
android:textSize="15sp" />
<RadioButton android:id="@+id/radioOther"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/rdoTxtOther"
android:textSize="15sp" />
</RadioGroup>
<EditText
android:id="@+id/txtTipOther"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:numeric="decimal"/>
</TableRow>
<!-- Linha para os botes Calculate e Reset. O boto Calculate
posicionado na coluna dois, e o Reset na coluna trs -->
<TableRow>
<Button
android:id="@+id/btnReset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
android:text="@string/btnReset"/>
<Button
android:id="@+id/btnCalculate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="3"
71
72
Android Cookbook
android:layout_column="0"
android:text="@string/textLbl6"/>
<TextView
android:id="@+id/txtTipPerPerson"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_span="2"/>
</TableRow>
<!-- Fim de todas as linhas e widgets -->
</TableLayout>
TableLayout e TableRow
Depois de analisar main.xml, voc pode perceber que TableLayout e TableRow so simples
de usar. Voc cria o TableLayout uma vez, e ento insere uma TableRow. Agora voc est
livre para inserir quaisquer outros widgets, como TextView, EditView e assim por diante,
dentro dessa TableRow.
No deixe de dar uma olhada nos atributos, especialmente em android:stretchColumns,
android:layout_column e android:layout_span, os quais permitem que voc posicione widgets
da mesma forma que voc faria com uma tabela HTML comum. Recomendo que voc
siga os links para esses atributos e aprenda como eles funcionam em um TableLayout.
73
Como (at onde eu sei) intervalos atualmente no esto disponveis, voc ver futuramente que temos realmente de verificar a presena de certos valores, como zero ou
valores vazios, para garantir que as contas de nosso calculador de gorjeta no falhem.
Anlise do Tipster.java
Agora vamos analisar o arquivo Tipster.java que controla nosso aplicativo. Essa a
classe principal que cuida do layout, do tratamento de eventos e da lgica do aplicativo.
O plugin do Eclipse para Android cria o arquivo Tipster.java em nosso projeto com
o cdigo padro que pode ser visto no exemplo 1.7.
74
Android Cookbook
75
Veja , onde utilizamos o mtodo requestFocus() da classe View. Como o widget EditText
derivado da classe View, esse mtodo aplicvel a ele. Isso feito para que, quando
nosso aplicativo carregar, o campo de texto Total Amount receba foco e o cursor seja posicionado nele. Isso semelhante tela de login de aplicativos web populares onde
o cursor est presente no campo de texto do nome do usurio.
Agora verifique
setEnabled(boolean enabled) no widget Button. Isso feito para que o usurio no possa
clicar nele antes de digitar valores nos campos obrigatrios. Se permitssemos que
o usurio clicasse em Calculate sem digitar valores nos campos Total Amount e No. of People,
teramos de escrever um cdigo de validao para capturar essas condies. Isso significaria mostrar um alerta em popup avisando o usurio dos valores vazios. Algo desse
tipo adicionaria cdigo e interao de usurio desnecessrios. Quando o usurio v
o boto Calculate desabilitado, fica bastante bvio que, a no ser que todos os valores
sejam digitados, a gorjeta no poder ser calculada.
Verifique no exemplo 1.8. Aqui o campo de texto Other Tip Percentage est desabilitado.
Isso feito porque o boto de opo 15% tip selecionado por padro quando o
aplicativo carrega. Essa seleo padro no carregamento do aplicativo feita por meio
do arquivo main.xml. D uma olhada na linha de main.xml onde a instruo a seguir
seleciona o boto de opo 15% tip:
android:checkedButton="@+id/radioFifteen"
Processamento de eventos da UI
Semelhante aos populares frameworks de UI do Windows, Java Swing, Flex e outros, o
Android tambm fornece um modelo de eventos que permite a voc escutar determinados eventos na UI provocados pela interao do usurio. Vejamos como podemos
utilizar o modelo de eventos do Android em nosso aplicativo.
Primeiro, vamos nos concentrar nos botes de opo da UI. Queremos saber qual
boto de opo o usurio selecionou, uma vez que isso nos permitir determinar o
percentual de gorjeta em nossos clculos. Para escutar botes de opo, utilizamos
a interface esttica OnCheckedChangeListener(). Isso vai nos notificar quando o estado de
seleo de um boto de opo mudar.
76
Android Cookbook
Em nosso aplicativo, queremos habilitar o campo de texto Other Tip Percentage apenas
quando o boto de opo Other estiver selecionado. Quando os botes 15% tip e
20% tip estiverem selecionados, ns queremos desabilitar esse campo de texto. Alm
disso, queremos incluir um pouco mais de lgica em nome da usabilidade. Como
discutimos antes, no devemos habilitar o boto Calculate at que todos os campos
obrigatrios tenham valores vlidos. Em termos dos trs botes de opo, queremos
garantir que o boto Calculate esteja habilitado para as duas condies a seguir:
O boto de opo Other est selecionado e o campo de texto Other Tip Percentage
tem valores vlidos.
Os botes de opo 15% tip ou 20% tip esto selecionados e os campos de
texto Total Amount e No. of People tm valores vlidos.
Veja o exemplo 1.9, o qual lida com os botes de opo. Os comentrios do cdigo-fonte so bastante autoexplicativos.
77
btnCalculate.setEnabled(txtAmount.getText().length() > 0
&& txtPeople.getText().length() > 0
&& txtTipOther.getText().length() > 0);
}
// Para determinar a escolha do percentual de gorjeta feita pelo usurio
radioCheckedId = checkedId;
}
});
78
Android Cookbook
79
O exemplo 1.13 mostra como detectar qual boto foi clicado verificando o ID da View
que recebe o evento de clique.
Reset do aplicativo
Quando o usurio clicar no boto Reset, os campos de texto devero ser limpos, o
boto de opo-padro 15% tip dever ser selecionado, e quaisquer resultados
calculados devero ser limpos.
O exemplo 1.14 mostra o mtodo reset().
80
Android Cookbook
81
82
Android Cookbook
showErrorAlert("Enter a valid Tip percentage", txtTipOther.getId());
isError = true;
}
}
/*
* Se todos os campos estiverem preenchidos com valores vlidos, prossiga
* para o clculo das gorjetas
*/
if (!isError) {
Double tipAmount = ((billAmount * percentage) / 100);
Double totalToPay = billAmount + tipAmount;
Double perPersonPays = totalToPay / totalPeople;
txtTipAmount.setText(tipAmount.toString());
txtTotalToPay.setText(totalToPay.toString());
txtTipPerPerson.setText(perPersonPays.toString());
}
}
83
Quando reunimos tudo isso, o resultado deve ficar como a figura 1.39.
Concluso
O desenvolvimento para o OS Android no to diferente do desenvolvimento para
qualquer kit de ferramentas de UI, incluindo Microsoft Windows, X Windows, Java
Swing ou Adobe Flex. O Android tem, claro, suas diferenas e, em geral, um design
muito bom. O paradigma de layout em XML muito interessante e til para criao
de UIs complexas utilizando XML simples. Alm disso, o modelo de tratamento de
eventos simples, rico em funcionalidades e intuitivo de se utilizar no cdigo.