Android Cookbook
Transcript of Android Cookbook
-
8/10/2019 Android Cookbook
1/63
Ian F. Darwin
Android Cookbook
Novatec
-
8/10/2019 Android Cookbook
2/63
Dados Internacionais de Catalogao na Publicao (CIP)(Cmara Brasileira do Livro, SP, Brasil)
Darwin, Ian F. Android cookbook / Ian F. Darwin. -- So Paulo : Novatec Editora ; Sebastopol, CA : O`Reilly, 2012.
ISBN 978-85-7522-323-9
1. Android (Programa de computador)2. Aplicao de programa - Desenvolvimento3. Computao mvel 4. Google 5. Internet sem fio6. Telefones celulares I. Ttulo.
12-11335 CDD-005.26
ndices para catlogo sistemtico:
1. Android : Plataforma de desenvolvimento para aplicativos mveis : Programa de computador 005.26
OG20120918
Authorized Portuguese translation of the English edition of titled Android Cookbook, First Edition ISBN9781449388416 2012 OReilly Media Inc. This translation is published and sold by permission of O'ReillyMedia, 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 ISBN9781449388416 2012 OReilly Media Inc. Esta traduo publicada e vendida com a permisso da O'ReillyMedia, 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 PratesTraduo: Rafael ZanolliReviso tcnica: Edgard DamianiReviso gramatical: Giacomo Leone NetoEditorao eletrnica: Carolina Kuwabata
ISBN: 978-85-7522-323-9Histrico de impresses:
Setembro/2012 Primeira edio
Novatec Editora Ltda.Rua Lus Antnio dos Santos 11002460-000 So Paulo, SP BrasilTel.: +55 11 2959-6529Fax: +55 11 2950-8869Email: [email protected]: www.novatec.com.br
Twitter: twitter.com/novateceditoraFacebook: facebook.com/novatecLinkedIn: linkedin.com/in/novatec
-
8/10/2019 Android Cookbook
3/63
23
CAPTULO 1
Primeiros passos
1.1 Introduo: primeiros passosIan Darwin
DiscussoO famoso padro Ol, mundo (Hello, world ) surgiu quando Kernighan e Plaugherquiseram escrever uma receita sobre como comear a utilizar qualquer nova lin-guagem e ambiente de programao. Este captulo carinhosamente dedicado aesses nobres senhores, e a todos que j lutaram para dar seus primeiros passos emqualquer novo paradigma de programao.
1.2 Aprendendo a linguagem JavaIan Darwin
ProblemaAplicativos Android so escritos na linguagem de programao Java antes de seremconvertidos no formato de arquivo de classe prprio do Android, DEX. Se voc nosabe como programar em Java, vai ter diculdade em escrever aplicativos Android.
SoluoMuitos recursos esto disponveis para aprender Java. A maioria deles ensinar o quevoc precisa, mas tambm mencionar algumas classes de API (Application Program-ming Interface) que no esto disponveis para o desenvolvimento Android.Evite quaisquer sees em qualquer recurso que fale sobre os tpicos listados na colunaesquerda da tabela 1.1.
Tabela 1.1 Componentes da API Java a ignorar
API Java Equivalente Android
Swing, applets GUI do Android; veja o captulo 7
-
8/10/2019 Android Cookbook
4/63
Android Cookbook24
API Java Equivalente Android
Ponto de entrada de aplicativomain() Veja a receita 1.6
J2ME/Java ME A maior parte doandroid.* substitui a API Java ME
Servlets/JSP, J2EE/Java EE Projetados para uso no lado do servidor
DiscussoAqui 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 progra-madores, especialmente queles que esto vindo de C/C++. Esse livro cresceumuito em tamanho para acompanhar o crescimento do Java SE ao longo deseu tempo de vida.
Head First Java (lanado no Brasil pela editora Starlin Alta, com o ttuloUsea cabea! Java) de Kathy Sierra e Bert Bates (OReilly). Esse livro fornece umatima 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 apresentaovisual para a linguagem.
Java: The Good Parts (lanado no Brasil pela editora Campus, com o ttuloOmelhor do Java) de Jim Waldo (OReilly).
Java Cookbook, o qual eu escrevi e a OReilly publicou. Esse livro tido comoum bom segundo livro para desenvolvedores Java. Ele tem captulos completossobre strings, expresses regulares, nmeros, data e hora, estruturas de dados,E/S e diretrios, internacionalizao, threads, e redes, todo temas que se aplicamao Android. Ele tambm tem vrios captulos especcos para Swing e algumastecnologias com base em EE.
Entenda, por favor, que essa lista provavelmente nunca vai estar totalmente atuali-zada. Voc tambm deve consultar o Android Development Bibliography, da OReilly,disponvel gratuitamente para download (mediante registro), uma compilao detodos os livros de vrias editoras cujos livros esto no servio online Safari. Esse livro
tambm distribudo sem custos em conferncias relevantes nas quais a OReillytem um estande.
-
8/10/2019 Android Cookbook
5/63
25Captulo 1 Primeiros passos
Veja tambmO autor principal deste livro mantm uma lista online de recursos Java emhttp:// www.darwinsys.com/java/ .
A OReilly tem alguns dos melhores livros Java do mercado; veja uma lista completaem http://oreilly.com/pub/topic/java.
1.3 Criao de um aplicativo Ol, mundo a partir da linha de comandoIan Darwin
ProblemaVoc deseja criar um novo projeto Android sem utilizar o plugin ADT do Eclipse.
SoluoUtilize a ferramentaandroid do kit de desenvolvimento do Android (Android Develo-pment Kit, ou ADK) com o argumentocreate project e alguns argumentos adicionaispara congurar seu projeto.
Discusso
Alm de ser o nome da plataforma,android
tambm o nome de uma ferramenta delinha de comando para criao, atualizao e gerenciamento de projetos. Voc podenavegar at o diretrioandroid-sdk-xxx , ou denir sua varivelPATH para incluir seusubdiretriotools.
Depois, para criar um novo projeto, utilize o comandoandroid create project com algunsargumentos. O exemplo 1.1 um exemplo executado em MS-DOS.
Exemplo 1.1 Criao de um novo projeto
C:> PATH=%PATH%;"C:\Documents and Settings\Ian\My Documents\android-sdk-windows\tools"; \ "C:\Documents and Settings\Ian\My Documents\android-sdk-windows\platform-tools"C:> android create project --target android-7 --package com.example.foo --name Foo --activity FooActivity --path .\MyAndroidCreated project directory: C:\Documents and Settings\Ian\My Documents\MyAndroidCreated directory C:\Documents and Settings\Ian\My Documents\MyAndroid\src\com\example\fooAdded le C:\Documents and Settings\Ian\My Documents\MyAndroid\src\com\example\foo\FooActivity.javaCreated directory C:\Documents and Settings\Ian\My Documents\MyAndroid\resCreated directory C:\Documents and Settings\Ian\My Documents\MyAndroid\bin
Created directory C:\Documents and Settings\Ian\My Documents\MyAndroid\libsCreated directory C:\Documents and Settings\Ian\My Documents\MyAndroid\res\values
-
8/10/2019 Android Cookbook
6/63
Android Cookbook26
Added le C:\Documents and Settings\Ian\My Documents\MyAndroid\res\values\strings.xmlCreated directory C:\Documents and Settings\Ian\My Documents\MyAndroid\res\layoutAdded le C:\Documents and Settings\Ian\My Documents\MyAndroid\res\layout\main.xmlAdded le C:\Documents and Settings\Ian\My Documents\MyAndroid\AndroidManifest.xmlAdded le C:\Documents and Settings\Ian\My Documents\MyAndroid\build.xml
C:>
A tabela 1.2 lista os argumentos para o cdigocreate project .
Tabela 1.2 Lista de argumentos de create project
Nome Signicado Exemplo
--activity Nome de sua classe principal e nome-padro para o arquivo.apk gerado --activity HelloActivity
--name Nome do projeto e do arquivo.apk gerado --name MyProject
--package Nome do pacote Java para suas classes --package com.example.hello
--path
Path (caminho) no qual o projeto ser criado (no cria umsubdiretrio dentro dele, por isso no utilize/home/you/workspace, mas, em vez disso,/home/you/workspace/NewProjectName)
--path /home/ian/workspace/MyProject (veja o exemplo anterior para Windows)
--target
Nvel de API almejado da plataforma Android; utilizeandroid list targets para ver a lista de alvos. Umnmero um "ID", e no um nvel de API; para tanto, utilizeandroid- com o nvel de API que voc deseja
--target android-10
Se ele no puder completar a operao solicitada, o comandoandroid apresentar umaextensa mensagem de uso do comando, listando todas as operaes que ele poderealizar, e os argumentos para elas. Se tiver sucesso, o comandoandroid create project criar os arquivos e diretrios listados na tabela 1.3.
Tabela 1.3 Artefatos criados por create project
Nome Signicado
AndroidManifest.xml Arquivo de congurao do projeto, com informaes essenciaissobre o projeto para o Android
bin Binrios gerados (arquivos de classe compilados)build.properties Arquivo de propriedades editvel
build.xml Arquivo de controle de compilao Ant padro
default.properties ouproject.properties (dependendo da verso das ferramentas)
Armazena a verso do SDK e as bibliotecas utilizadas; mantidopor plugin
gen Elementos gerados
libs Bibliotecas, claro
res Arquivos de recursos importantes (strings.xml , layouts etc.)
src Cdigo-fonte de seu aplicativo
-
8/10/2019 Android Cookbook
7/63
27Captulo 1 Primeiros passos
Nome Signicado
src/packagename/ActivityName.java Fonte da atividade de incio equivalente a main
test Cpias da maioria dos anteriores
uma prtica normal e recomendada no Android criar sua interface de usurio em XML utilizando o arquivo de layout criado emres/layout, mas certamente possvelescrever todo o cdigo em Java. Para manter este exemplo autocontido, faremos do jeito errado por enquanto. Utilize seu editor de texto favorito para substituir ocontedo do arquivoHelloWorld.java com o contedo do exemplo 1.2.
Exemplo 1.2 HelloWorld.javaimport android.app.Activity;
import android.widget.*;public class Hello extends Activity { /** * Este mtodo invocado quando a atividade instanciada em resposta, * por exemplo, a um clique seu no cone do aplicativo na tela inicial */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Cria uma TextView para a atividade atual TextView view = new TextView(this); // Faz ele dizer algo view.setText("Hello World"); // Coloca essa viso recm-criada dentro da atividade, // mais ou menos como JFrame.getContentPane().add(view) setContentView(view); }}
Supondo que voc tenha a ferramenta Ant Build Tool da Apache Software Foundationinstalada (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 repre-sentando Android Package) no diretriobin.
Se esta sua primeira vez aqui, voc pode ter de criar um dispositivo virtual Android
(Android Virtual Device, ou AVD), que simplesmente uma congurao nomeada
-
8/10/2019 Android Cookbook
8/63
Android Cookbook28
para o emulador Android especicando a resoluo-alvo, o nvel de API e assim pordiante. Voc pode criar um emulador utilizando:
android create avd -n my_droid -t 7
Para mais detalhes sobre a criao de um AVD (veja a receita 3.3).
Voc pode ento iniciar o servidor do ADB (Android Debug Bridge) e o emulador:adb start-serveremulator -avd my_droid -t 5
Presumindo que agora voc tenha o emulador sendo executado ou seu dispositivoconectado e reconhecido via USB, voc pode fazer:
adb -e install -r bin/MyAndroid.apk
A ag-e para o emulador; utilize-d para um dispositivo real.
Se voc tiver prtica com scripts shell ou arquivos em lote, poder criar um arquivochamado, digamos,download , para evitar ter de digitar a invocaoadb a cada ciclode compilao.
Finalmente voc pode iniciar seu aplicativo! Voc pode utilizar a listaApplication: toqueno pequeno cone que se parece com uma linha 55 de pontos, encontre seu aplicativopelo nome e toque em seu cone.
Voc provavelmente vai considerar conveniente criar um cone para seu aplicativo na
tela inicial do dispositivo ou emulador; esse cone sobreviver a vrios ciclosinstall-r , portanto, essa a forma mais fcil de testar a execuo de seu aplicativo.
Veja tambmReceita 1.4. O blog a little madness tem uma formulao mais detalhada. O siteocial de referncia do Android tem uma pgina sobre desenvolvimento sem Eclipse.
1.4 Criao de um aplicativo Ol, mundo no EclipseIan Darwin
ProblemaVoc quer utilizar o Eclipse para desenvolver seu aplicativo Android.
SoluoInstale 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.
-
8/10/2019 Android Cookbook
9/63
29Captulo 1 Primeiros passos
DiscussoAssim 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, porfavor, consulte a receita 1.5.
Para iniciar, crie um novo projeto a partir do menuFile -> New (veja a gura 1.1).
Figura 1.1 Comeando a criar um projeto Eclipse.
Clique emNext. D um nome ao seu novo projeto e clique emNext (veja a gura 1.2).
Selecione uma verso de SDK como alvo. A verso 2.1 oferece para voc praticamentetodos os dispositivos atualmente em uso; as verses 3.x ou 4.x oferecem os ltimosrecursos (veja a gura 1.3). Voc decide.
A gura 1.4 mostra a estrutura do projeto expandida no painelProject direita. Elatambm mostra a que ponto voc pode chegar na utilizao do recurso de preenchi-mento automtico do Eclipse dentro do Android eu inclu o atributogravity para ortulo, e o Eclipse est oferecendo uma lista completa de valores de atributos poss-veis. Eu escolhicenter-horizontal , por isso o rtulo dever estar centralizado quandocolocarmos o aplicativo para funcionar.
-
8/10/2019 Android Cookbook
10/63
Android Cookbook30
Figura 1.2 Congurao de parmetros para um novo projeto Eclipse.
Figura 1.3 Denio do SDK alvo para um novo projeto Eclipse.
-
8/10/2019 Android Cookbook
11/63
31Captulo 1 Primeiros passos
Figura 1.4 Uso do editor do Eclipse para denir gravity em um TextView.
Na realidade, se voc denirgravity como center_vertical no LinearLayout e deni-locomo center_horizontal na TextView, o texto estar centralizado tanto vertical quantohorizontalmente. O exemplo 1.3 o arquivo de layoutmain.xml (localizado emres/ layout) que realiza isso.
Exemplo 1.3 Layout do XML
-
8/10/2019 Android Cookbook
12/63
Android Cookbook32
Como sempre, o Eclipse gera uma verso compilada sempre que voc salva um arqui-vo-fonte. Alm disso, em um projeto Android, ele tambm executa uma compilaoAnt 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 selecioneRun As -> Android Project (veja a gura 1.5.).
Figura 1.5 Executando um projeto Android Eclipse.
Isso iniciar o emulador do Android se ele ainda no estiver sendo executado. Oemulador comear com a palavra Android em texto simples, depois trocar paraa fonte Android mais elaborada, com um detalhe em branco se movendo sobre asletras em azul lembra da inicializao do Microsoft Windows 95 (veja a gura 1.6).
Depois de um pouco mais de tempo, seu aplicativo dever inicializar. A gura 1.7mostra apenas uma tela do aplicativo em si, j que o restante da viso do emulador redundante.
Veja tambmReceita 1.3.
-
8/10/2019 Android Cookbook
13/63
33Captulo 1 Primeiros passos
Figura 1.6 O projeto Android sendo inicializado no emulador.
Figura 1.7 Projeto Eclipse sendo executado no emulador.
1.5 Congurando um IDE no Windows para desenvolvimento AndroidDaniel Fowler
Problema
Voc deseja desenvolver seus aplicativos Android utilizando um PC Windows, porisso um guia conciso da congurao de um IDE para essa plataforma seria til.
-
8/10/2019 Android Cookbook
14/63
Android Cookbook34
SoluoO uso do IDE Eclipse recomendado no desenvolvimento de aplicativos Android.Congurar o Eclipse no Windows no uma instalao com um nico passo; vriosestgios precisam ser completados. Esta receita fornece detalhes sobre esses estgios.
DiscussoNo desenvolvimento de aplicativos para Android, o IDE (Integrated DevelopmentEnvironment) Eclipse para Java recomendado. O plugin ADT (Android DevelopmentTools) est disponvel para aprimorar o Eclipse, o qual utiliza o SDK do Android,fornecendo programas essenciais para desenvolvimento de software para o Android.Para congurar um ambiente de desenvolvimento, voc precisa efetuar o downloade 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 PCWindows (testado em XP, Vista e Windows 7).
Instalao do JDK (Java Development Kit)V at a pgina de downloads do Java, emhttp://www.oracle.com/technetwork/java/ javase/downloads/index.html .
Selecione o cone do Java para acessar os downloads do JDK:
A lista de downloads do JDK ser mostrada. Clique no boto de opoAccept LicenseAgreement; do contrrio, voc no poder continuar. Faa o download e execute o JDKmais 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 precisarselecionar a localizao do site de download. Aceite quaisquer avisos de seguranaque apaream, mas apenas se voc estiver efetuando o download na pgina ocialde downloads do Java.
-
8/10/2019 Android Cookbook
15/63
35Captulo 1 Primeiros passos
Quando o download tiver terminado e for executado, voc ter de percorrer as telasde instalao, clicandoNext at que o instalador do JDK tenha concludo. Voc nodeve ter de alterar nenhuma das opes apresentadas. Quando o instalador do JDKtiver concludo, clique no botoFinish. Pode ser que uma pgina de registro de produto
seja carregada; voc pode fech-la ou escolher registrar sua instalao.Instalao do Eclipse para desenvolvimento Java
A pgina de download do Eclipse est emhttp://www.eclipse.org/downloads/ .
O Windows precisa ser selecionado na lista suspensaPackages; selecione o link relevantede download do IDE Eclipse para desenvolvedores Java (veja a gura 1.8).
Figura 1.8 Escolha de um download do Eclipse.
Faa o download e abra o arquivo ZIP. No arquivo haver um diretrioeclipse con-tendo vrios arquivos e subdiretrios. Copie o diretrioeclipse e todo o seu contedocomo fornecido (Figura 1.9). O local habitual para o qual copiar os arquivos na raizdo drive C ou dentro deC:\Arquivos de Programas. Voc pode ter de selecionarContinuar quando o Windows pedir permisso para a cpia.
Crie um atalho de desktop paraeclipse.exe.
Figura 1.9 Contedo da pasta do Eclipse.
-
8/10/2019 Android Cookbook
16/63
Android Cookbook36
Execute o Eclipse para que ele congure um workspace (espao de trabalho); fazerisso tambm vericar que tanto o Java quanto o Eclipse foram instalados correta-mente. Quando voc executar o Eclipse, pode ser que um aviso de segurana sejamostrado; selecioneRun para continuar. Aceite a localizao padro do workspace ouutilize um diretrio diferente.
Instalao do SDK do Android
V at a pgina de download do SDK do Android emhttp://developer.android.com/ sdk/index.html.
Escolha o pacote EXE mais recente para Windows (no momento em que escrevoisso,installer_r16-windows.exe ) e selecioneRun. Aceite o aviso de segurana apenas sevoc estiver efetuando o download na pgina ocial do site do SDK do Android. Oinstalador Android SDK Tools mostrar algumas telas. Selecione o botoNext em cada
uma delas; voc no deve ter de alterar nenhuma opo. Uma vez queC:\Arquivos deProgramas um diretrio protegido, voc pode ou obter permisso para instalar nele,ou, como fazem alguns desenvolvedores, instalar em sua pasta de usurio ou outrodiretrio por exemplo,C:\Android\android-sdk .
Quando o botoInstall for clicado, uma tela de progresso aparecer brevemente en-quanto os arquivos do Android so copiados. Clique no ltimo botoNext e no botoFinish ao nal da instalao. Se voc deixou a caixaStart SDK Manager selecionada, o SDKManager ser executado. Do contrrio, selecione o SDK Manager a partir do grupode programas Android SDK Tools (Iniciar->Todos os Programas->Android SDK Tools->SDK Manager).Quando o SDK Manager iniciar, os pacotes Android disponveis para download serovericados. Ento, uma lista de pacotes disponveis ser mostrada com alguns delespr-selecionados para download. Uma coluna deStatus mostrar se um pacote estinstalado ou no. Na gura 1.10 voc pode ver que as Android SDK Tools acabaramde ser instaladas e isso est reetido na colunaStatus.
Marque cada pacote que precisa ser instalado. Vrios pacotes esto disponveis. Estesincluem pacotes da plataforma SDK para cada nvel de API, exemplos de aplicativospara a maioria dos nveis de API, APIs do Google Maps, APIs de fabricantes especcos,documentao, cdigo-fonte e os pacotes extras a seguir para o Google:
-
8/10/2019 Android Cookbook
17/63
37Captulo 1 Primeiros passos
Android SupportUtilizado para oferecer suporte a APIs Android mais recentes em dispositivosmais antigos.
AdMob Ads SDK Para incorporao de publicidade em aplicativos.
Analytics SDK Para oferecer suporte anlise das compras de clientes.
Market BillingAcrescenta suporte para compras dentro do aplicativo.
Market LicensingAjuda 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.
-
8/10/2019 Android Cookbook
18/63
Android Cookbook38
recomendado que voc efetue o download de vrias plataformas de SDK parapermitir testes de aplicativos em vrias conguraes de dispositivo. Vale notar quecomputadores mais antigos tero diculdade em executar os emuladores de disposi-tivos virtuais para as APIs mais recentes do Android; portanto, nesses computadores,
desenvolva utilizando as plataformas SDK mais antigas. Se estiver em dvida quanto aqual download efetuar, aceite as escolhas iniciais e execute novamente o SDK Managerpara obter outros pacotes como e quando necessrio; ou marque todos os pacotespara efetuar o download de tudo (o download pode demorar um pouco). Clique noboto Install packages.
Os pacotes selecionados sero mostrados em uma lista; se um pacote tiver termosde licena que requerem aceitao, ele ser mostrado com um ponto de interroga-o. 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. Pacotesrejeitados so marcados com um vermelho. Alternativamente, clique emAccept All para aceitar tudo que est disponvel Clique no botoInstall e uma barra de progressomostrar os pacotes sendo instalados, bem como quaisquer erros que ocorram. NoWindows, um erro comum ocorre quando o SDK Manager incapaz de acessar oude renomear diretrios. Execute novamente o SDK Manager como administradore verique se o diretrio no tem nenhuma ag ou nenhum arquivo apenas paraleitura; veja a receita 1.12 para mais detalhes. Quando tiver concludo, feche o SDKManager clicando no boto no canto superior da janela.
Instalao do plugin ADT
A instalao do plugin ADT feita via Eclipse, mas para isso voc precisa executar oEclipse a partir da conta de administrador. Utilize o atalho criado antes ou oeclipse.exe na pastaeclipse. Em qualquer um dos casos, abra o menu de contexto (geralmentepor meio de um clique com o boto direito), selecione Executar como administradore aceite quaisquer avisos de segurana. Quando o Eclipse tiver carregado, abra o itemde menuHelp e selecioneInstall New Software.
Na tela de instalao, digite este endereo na caixa Work with:https://dl-ssl.google.com/android/eclipse/
Clique no botoAdd. Uma telaAdd Repository aparecer; na caixaName digite algo signi-cativo, como ADT plug-in (o endereo web mencionado antes ser mostrado nacaixaLocation); veja a gura 1.11.
Clique no botoOK. A tela ser atualizada depois de brevemente mostrar Pendingna colunaName da tabela.
Marque a caixa ao lado deDeveloper Tools. Ento, selecione o botoNext na parte inferiorda tela (veja gura 1.12).
-
8/10/2019 Android Cookbook
19/63
39Captulo 1 Primeiros passos
Figura 1.11 Incluso do repositrio ADT plug-in.
Uma lista de itens a serem instalados ser mostrada. Se voc receber uma mensagemde erro, verique se o Eclipse foi executado na conta do administrador. SelecioneNext novamente. Uma tela mostrar as licenas; certique-se de que cada licena tenha
sido aceita (selecione o boto de opo I accept the terms of the license agreements).Ento clique no botoFinish. Um aviso de segurana ter de ser aceito para concluira instalao; selecioneOK para esse aviso (o endereo digitado antes um endereoseguro). O Eclipse pedir uma reinicializao. Selecione o botoRestart Now e o Eclipsevai fechar e recarregar. Uma caixa de dilogo Welcome to Android Developmentvai aparecer. Dena a localizao do SDK na caixaExisting Location (uma vez que o SDKManager j foi executado), v at a pasta do SDK do Android (por padro,C:\Arquivosde Programas\Android\android-sdk ), e clique emNext (veja a gura 1.13).
Uma pergunta de monitoramento de uso do Google Android SDK vai aparecer; mo-dique a opo se necessrio e clique emFinish. O Eclipse estar agora conguradopara compilar e depurar aplicativos Android. Veja a receita 3.3 para congurar umemulador Android; depois experimente a receita 1.4 como um teste de sanidade. Co-necte um dispositivo fsico no computador e utilize suas conguraes para ativar oUSB Debugging (emDevelopment, dentro deApplications).
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.
-
8/10/2019 Android Cookbook
20/63
Android Cookbook40
Figura 1.12 Escolhendo o que instalar.
Figura 1.13 Conexo do recm-instalado SDK ao recm-instalado plugin ADT.
-
8/10/2019 Android Cookbook
21/63
41Captulo 1 Primeiros passos
1.6 Entendendo o ciclo de vida do AndroidIan Darwin
ProblemaAplicativos Android no tm um mtodo main; voc precisa aprender como elescomeam e como param ou so parados.
SoluoA classeandroid.Activity fornece vrios mtodos de ciclo de vida bem denidos queso chamados quando um aplicativo iniciado, suspenso, reiniciado e assim pordiante, assim como um mtodo que voc pode chamar para marcar uma atividade
como concluda.DiscussoSeu aplicativo Android executa seu prprio processo Unix, por isso, em geral, ele nopode afetar diretamente nenhum outro aplicativo em execuo. A VM Dalvik faz ainterface 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 devida bem denido 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 focode entrada.
Parado, no qual o aplicativo est completamente oculto da viso.
Seu aplicativo percorrer esses estados quando o Android chamar os mtodos a seguirna atividade atual, no momento apropriado:
void onCreate(Bundle savedInstanceState)void onStart()void onResume()void onRestart()void onPause()void onStop()void onDestroy()
Voc pode ver o diagrama de estado desse ciclo de vida na gura 1.14.
No caso da primeira atividade de um aplicativo,onCreate() a forma como voc sabeque o aplicativo foi iniciado. aqui que voc normalmente realiza trabalhos de tipo
-
8/10/2019 Android Cookbook
22/63
Android Cookbook42
construtor, como denir a janela principal comsetContentView() , incluir ouvintes(listeners) para botes que realizem trabalhos (inclusive iniciar atividades adicio-nais) e assim por diante. Esse o nico mtodo que at mesmo o mais simples dosaplicativos Android precisa.
(no process)
Running
onStop()
(new)
onStart()
onStop() onResume()
onDestroy()
onPause()onResume()
onDestroy()
StoppedPaused
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 deteste no Eclipse e sobrescrevendo todos os mtodos utilizando instrues de log parans de depurao.
1.7 Instalao de arquivos .apk em um emulador por meio do ADBRachee Singh
Problema
Voc tem um arquivo.apk de um aplicativo, e deseja instal-lo no emulador para con-ferir esse aplicativo, ou porque um aplicativo que voc est desenvolvendo o requer.
SoluoUtilize a ferramenta de linha de comando ADB para instalar o arquivo.apk no emu-lador em execuo; voc tambm pode utilizar essa ferramenta para instalar umarquivo.apk em um dispositivo Android conectado.
-
8/10/2019 Android Cookbook
23/63
43Captulo 1 Primeiros passos
DiscussoPara 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 diretriotools.2. Procure um executvel chamadoadb no diretriotools. Se ele estiver presente,essa a localizao do arquivoadb; do contrrio, deve haver um arquivo.txt chamado adb has moved. O contedo desse arquivo meramente direcionavoc para a localizao do binrio doadb; o arquivo arma que oadb estpresente no diretrio platform-tools em vez de estar no diretriotools.
3. Assim que voc tiver localizado o programaadb, use o comandocd para chegara essa localizao em um terminal (Linux) ou prompt de comando (Windows).
4. Utilize o comandoadb install localizao do .apk que voc deseja instalar . Se vocreceber command not found no Linux, tente utilizar ./adb em vez de apenasadb.
Isso deve iniciar a instalao no dispositivo que est atualmente sendo executado(seja um emulador em execuo em seu desktop, ou um dispositivo fsico Androidconectado).
Depois de a instalao terminar, no menu do dispositivo/emulador Android, vocdeve ver o cone do aplicativo que acabou de instalar (veja a gura 1.15).
Figura 1.15 Comando da instalao.
-
8/10/2019 Android Cookbook
24/63
Android Cookbook44
1.8 Instalao de aplicativos em um emulador via SlideMEDavid Dawes
ProblemaAs app stores (em uma traduo livre, lojas de aplicativos) so uma enorme parteda atrao dos smartphones modernos. O Android Market1 do Google aapp store ocial, mas voc tambm pode querer utilizar outras.
SoluoA SlideMe LLC oferece umaapp store alternativa. Aapp store SlideME permite quevoc instale outros aplicativos (talvez voc queira integrar com outros aplicativos),
bem como que voc teste a experincia de publicar e efetuar o download de seusprprios aplicativos em seu dispositivo emulado Android. A SlideME tambm alcanamuitos usurios Android que esto fora do Android Market, incluindo pessoas comdispositivos no suportados e aqueles que no vivem em um pas onde h suportedo Android Market.
DiscussoUma alternativa ao Android Market ocial a SlideME, umaapp store alternativa. ASlideME pode no ter tantos aplicativos quanto o Android Market do Google, mastem algumas vantagens, incluindo o fato de que funciona facilmente em um dispo-sitivo Android emulado.
V at o site da SlideME utilizando seu dispositivo Android emulado, navegue oubusque aplicativos e clique em um aplicativo gratuito. Depois de uma pausa paradownload 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 instalaro aplicativo. Durante a instalao, ser pedido que voc revise e aceite a licena parao software.
Assim que o aplicativo da SlideME tiver sido instalado, voc poder percorrer ocatlogo e instalar mais aplicativos sem utilizar o navegador. Isso muito mais fcildo que utilizar um navegador web para efetuar o download dos aplicativos, j quea apresentao projetada para o dispositivo Android; simplesmente escolha umacategoria, navegue dentro dela, e escolha um aplicativo para instalar. Eu tive algunsproblemas de estabilidade utilizando o aplicativo em meu emulador ele congelouem 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, unicada
s lojas de msica, lmes e livros, chamada de Google Play (fonte: Wikipdia).
-
8/10/2019 Android Cookbook
25/63
45Captulo 1 Primeiros passos
Percebi, no frum de discusso Android Invasion noLinkedin.com, que alguns usuriosdo Android caram desapontados ao perceber que muitos provedores de telefonescelulares no incluem o Android Market ocial em suas ofertas de telefones celularesAndroid, e, a no ser que voc se sinta vontade em fazer o root2 e atualizar seu tele-
fone Android, no h como acess-lo. A maioria dos clientes no se sente confortvelem fazer o root e atualizar seus telefones, e, para eles, a SlideME oferece um modoalternativo de encontrar aplicativos gratuitos e baratos para seus telefones.
Veja tambmA SlideME tambm permite que voc publique seus aplicativos em suaapp store; vejaa pgina Applications no site da SlideME.
Para informaes sobre o desenvolvimento de aplicativos para a SlideME, consultehttp://slideme.org/developers.
1.9 Compartilhando classes Java de outro projeto EclipseIan Darwin
ProblemaVoc deseja utilizar uma classe de outro projeto, mas no quer copiar e colar.
SoluoInclua o projeto como um projeto referenciado, e o Eclipse (e o DEX) cuidaro dotrabalho.
DiscussoVoc muitas vezes precisa reutilizar classes de outro projeto. Em meu programa demonitoramento GPS, o JPSTrack, a verso do Android empresta classes como o m-
dulo de I/O de arquivos da verso Java SE. Voc certamente no deseja copiar e colarclasses 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 dasclasses que voc deseja importar, tudo que voc tem de fazer declarar o projeto quecontm as classes necessrias (a verso Java SE neste caso) como um projeto referen-ciado no path de compilao. SelecioneProject->Properties->Java Build Path, selecioneProjects,e clique emAdd. Na gura 1.16, eu estou incluindo o projeto SE jpstrack como umadependncia no projeto Android jpstrack.android.2 N.T.: O rooting um processo que permite a usurios de smartphones, tablets, e outros disposi-
tivos que executam o sistema operacional Android, obter controle privilegiado (conhecido comoacesso raiz) dentro do subsistema do Android (fonte: Wikipdia).
-
8/10/2019 Android Cookbook
26/63
Android Cookbook46
Figura 1.16 Tornando um projeto dependente de outro utilizando Eclipse padro.
Desenvolvedores mveis que tambm criam aplicativos para outras plataformas de-
vem notar que essa tcnica no funciona se voc tem o plugin BlackBerry Java atual(do nal de 2011) instalado em sua instalao Eclipse. Esse um bug no plugin Bla-ckBerry Java; ele sinaliza incorretamente at mesmo projetos no BlackBerry comodependentes de projetos de biblioteca no BlackBerry, e marca o projeto como tendoum erro, o que impede a gerao e execuo correta do cdigo. Remova o plugindefeituoso 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
conguraes do classpath. Ou copie sicamente este arquivo para o diretriolibs efaa referncia a ele a partir desse local.
Um mtodo mais novo que frequentemente mais convel, e agora ocialmenterecomendado, mas til apenas se ambos os projetos forem projetos Android, decla-rar o projeto de biblioteca como tal na guiaProject->Properties->Android->Library (marqueo boto Is Library), e utilizar o botoAdd no outro projeto, na mesma tela, para listar oprojeto de biblioteca como uma dependncia do projeto principal (veja a gura 1.17).
Para fs da linha de comando, o primeiro mtodo envolve a edio do arquivo.class-
path , enquanto o segundo simplesmente cria entradas no arquivo project.properties,por exemplo:
-
8/10/2019 Android Cookbook
27/63
47Captulo 1 Primeiros passos
# Projeto alvotarget=android-7android.library=falseandroid.library.reference.1=../wheel
Figura 1.17 Tornando um projeto dependente de outro utilizando ADT.
Como voc provavelmente est mantendo ambos os projetos em controle de verso(e se forem programas que em algum momento voc pretende lanar, voc deve!),lembre-se de marcar ambos os projetos quando lanar o projeto Android umdos pontos a favor do controle de verso que voc capaz de recriar exatamente oque entregou.
Veja tambmConsulte a documentao ocial sobre projetos de biblioteca.
1.10 Referenciando bibliotecas para implementar funcionalidades externRachee Singh
ProblemaVoc precisa referenciar uma biblioteca externa em seu cdigo-fonte.
-
8/10/2019 Android Cookbook
28/63
Android Cookbook48
SoluoObtenha o arquivo JAR da biblioteca requerida e inclua-o em seu projeto.
DiscussoComo exemplo, voc pode ter de utilizar o AndroidPlot, uma biblioteca para repre-sentao de diagramas e grcos em seu aplicativo, ou o OpenStreetMap, um projetowiki que cria e fornece dados e mapeamento geogrcos gratuitos. Se armativo, seuaplicativo precisa referenciar essas bibliotecas. Voc pode fazer isso no Eclipse empoucos passos simples:
1. Efetue o download do arquivo JAR correspondente biblioteca que voc desejautilizar.
2. Depois de criar seu projeto Android no Eclipse, clique com o boto direitosobre o nome do projeto e selecioneProperties no menu (Figura 1.18).3. Na lista do lado esquerdo, selecioneJava Build Path e clique na guiaLibraries.4. Clique no botoAdd External JARs.5. Fornea o local onde voc efetuou o download do arquivo JAR da biblioteca
que voc deseja utilizar.
Figura 1.18 Seleo de propriedades do projeto.
-
8/10/2019 Android Cookbook
29/63
49Captulo 1 Primeiros passos
Nesse ponto, voc ver um diretrioReferenced Libraries em seu projeto. Os JARs quevoc incluiu vo aparecer (veja a gura 1.19).
Uma abordagem alternativa criar uma pastalib em seu projeto, copiar sicamente osarquivos JAR para ela e inclu-los individualmente como voc fez antes, mas, em vezdisso, clicando no botoAdd JARs. Isso mantm tudo em um lugar s (especialmentese seu projeto for compartilhado por meio de um sistema de controle de verso comoutros 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 paraquestes de licenciamento referentes aos arquivos JAR includos (veja a gura 1.20).
Figura 1.19 Incluso de bibliotecas.
Em qualquer um dos casos, se voc tambm compilar com Ant, certique-se deatualizar seu arquivobuild.xml.
Qualquer que seja o modo escolhido bastante fcil incluir bibliotecas em seu projeto.
-
8/10/2019 Android Cookbook
30/63
Android Cookbook50
Figura 1.20 Incluso do arquivo JAR externo.
1.11 Uso de exemplos do SDK para ajudar a evitar situaes de dvidaDaniel Fowler
Problemas vezes difcil codicar determinada funcionalidade, especialmente quando adocumentao imprecisa ou no fornece nenhum exemplo.
Soluo
Analisar cdigos funcionais j existentes vai ajudar. O SDK do Android tem programasde exemplo que voc pode destrinchar para ver como funcionam.
DiscussoO SDK do Android vem com vrios aplicativos de exemplo que podem ser teisquando voc estiver tentando codicar alguma funcionalidade. Analisar o cdigo doexemplo pode ser esclarecedor. Assim que voc tiver instalado o SDK do Android,vrios exemplos se tornaro disponveis:
-
8/10/2019 Android Cookbook
31/63
51Captulo 1 Primeiros passos
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 (Simpli ed) Weather List Widget XML Adapters
Para abrir um projeto de exemplo a partir do Eclipse, abra o menuFile e ento sele-
cioneAndroid Project (veja a gura 1.21).
-
8/10/2019 Android Cookbook
32/63
Android Cookbook52
Figura 1.21 Iniciando um novo projeto Android.
No dilogoNew Android Project, selecione a opoCreate project from existing sample. Clique emNext e selecione o alvo de compilao. Uma lista de exemplos disponveis para o alvoselecionado ser mostrada. Se o exemplo necessrio no for mostrado, volte e selecioneoutro alvo de compilao. (O exemplo pode no estar instalado; o SDK Manager podeser utilizado para instalar exemplos adicionais se eles estiverem faltando durante osetup do SDK.) Escolha o exemplo a ser carregado, clique emFinish, e o exemplo sercopiado 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 capazde explorar o cdigo-fonte para ver como tudo feito.
Se os exemplos foram movidos do diretriosamples do SDK, utilize a opo Createproject from existing source no dilogoNew Android Project para abrir o exemplo.Quando o exemplo for executado pela primeira vez, selecioneAndroid Application nodilogoRun As que deve aparecer. Tambm pode ser necessrio congurar um AVDapropriado para executar o exemplo (veja a receita 3.3). Veja a gura 1.22.
Figura 1.22 Demonstraes da API em ao.
-
8/10/2019 Android Cookbook
33/63
53Captulo 1 Primeiros passos
Veja tambmO site Android Developers emhttp://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 StackOverow (http://www.stackoverow.com ; utilize android como tag) ou no canal IRC(Internet Relay Chat)#androiddev no freenode .
1.12 Mantendo o SDK do Android atualizadoDaniel Fowler
ProblemaO SDK deve ser mantido atualizado para permitir que desenvolvedores de aplicativostrabalhem com as APIs mais recentes na plataforma Android que est sempre emevoluo.
SoluoUtilize o programa Android SDK Manager para atualizar os pacotes SDK instaladosexistentes e instalar novos pacotes SDK. Isso inclui pacotes de terceiros para funcio-nalidades de dispositivos especcos.
DiscussoO sistema operacional (SO) Android est evoluindo constantemente, e, portanto, omesmo 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 emelhorados. A resoluo de problemas de segurana e possveis exploits3. A necessidade do suporte a novos dispositivos (por exemplo, o suporte a dis -
positivos tablet foi includo com a verso 3.0). O suporte a novas interfaces de hardware (por exemplo, o suporte a comuni -
cao 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 sequnciade comandos que aproveita das vulnerabilidades de um sistema computacional (fonte: Wikipdia).
-
8/10/2019 Android Cookbook
34/63
Android Cookbook54
Melhorias de funcionalidades (por exemplo, um novo engine JavaScript).
Alteraes no kernel Linux subjacente.
A substituio de interfaces de programao redundantes.
Novos usos (por exemplo, o Google TV). A comunidade de desenvolvimento Android como um todo.
Abordamos a instalao do SDK do Android em outro local (veja a Receita 1.5 ouhttp://developer.android.com/sdk/installing.html ). Depois de o SDK ter sido instaladona mquina de desenvolvimento e de o ambiente de programao estar sendo exe-cutado sem problemas, desenvolvedores tero, de vez em quando, de vericar se hatualizaes para o SDK.
Voc pode manter o SDK atualizado executando o programa SDK Manager. (Em umamquina Windows, execute oSDK Manager.exe na pastaC:\Arquivos de Programas\ Android\androidsdk , ou utilize o menuIniciar, e ento selecioneTodos os Programas->AndroidSDK Tools, e clique emSDK Manager). Voc tambm pode execut-lo dentro do Eclipse(utilizando o menuWindow e selecionandoAndroid SDK Manager); veja a gura 1.23. O SDKdo Android dividido em vrios pacotes. O SDK Manager procura automaticamentepor atualizaes para pacotes existentes e vai listar novos pacotes e aqueles fornecidospor fabricantes de dispositivos.
Figura 1.23 SDK Manager do Android.
Atualizaes disponveis sero mostradas em uma lista (assim como pacotes opcionaisdisponveis). Se uma atualizao ou um pacote tiver termos de licena que requeremaceitao eles sero mostrados com um ponto de interrogao. Destaque cada pacoteque tem um ponto de interrogao para ler os termos de licena. Voc pode aceitarou rejeitar o pacote utilizando os botes de opo. Pacotes rejeitados sero marcadoscom um vermelho (veja a gura 1.24).
-
8/10/2019 Android Cookbook
35/63
55Captulo 1 Primeiros passos
Figura 1.24 Escolha de pacotes do SDK.
Como alternativa, clique emAccept All para aceitar tudo que estiver disponvel. Todosos pacotes e atualizaes que estiverem disponveis para download e instalao seromostrados com um sinal de visto verde.
Clique no botoInstall para comear o download e a instalao; quando concludo,clique no botoClose (veja a gura 1.25).
Figura 1.25 Janela de log do SDK Manager.
Se o prprio programa SDK Manager tiver sido atualizado, voc ver uma mensagempedindo que reinicie o programa (veja a gura 1.26).
O SDK Manager tambm utilizado para download de pacotes adicionais que noso parte da plataforma padro. Esse mecanismo utilizado por fabricantes de dispo-sitivos para fornecer suporte a seus prprios hardwares. Por exemplo, a LG Electronicsfornece um dispositivo 3D e, para oferecer suporte capacidade 3D em aplicativos,um pacote adicional fornecido. Ele tambm utilizado pelo Google para permitiro download de APIs opcionais.
-
8/10/2019 Android Cookbook
36/63
Android Cookbook56
Figura 1.26 Noticao de atualizao do SDK Manager.
Na caixa de dilogo do SDK Manager, expanda e marque os pacotes necessrios nalista da esquerda e ento clique no botoInstall (veja a gura 1.27). Se um pacote deterceiros no estiver listado, o URL para um arquivorespository.xml , fornecido pelopublicador do pacote, ter de ser digitado por meio do menuTools.
Figura 1.27 Lista de componentes instalados e instalveis.
Possveis erros de atualizao no Windows
Em um sistema to complexo, h muitas coisas que podem dar errado. Esta seodiscute algumas dessas coisas e suas solues.
Execute o SDK Manager como administrador. Em uma mquina Windows, a localizaopadro para o SDK o diretrioC:\Arquivos de Programas\Android\android-sdk . Esse um diretrio restrito e isso pode fazer com que a instalao do SDK fracasse. Umdilogo de mensagem com o ttulo SDK Manager: failed to install pode aparecer(veja a gura 1.28).
-
8/10/2019 Android Cookbook
37/63
57Captulo 1 Primeiros passos
Figura 1.28 SDK Manager: falha ao instalar.
Para resolver esse erro h algumas coisas a vericar: Desconecte quaisquer dispositivos Android (isso pode impedir o adb.exe de
fechar).
V at C:\Arquivos de Programas\Android\Android-sdk e abra as propriedades para a pasta de ferramentas (selecione o menu de contexto e entoPropriedades).Certique-se de que a caixa seletora Somente leitura (arquivos da pasta) noest clicada (veja gura 1.29).
Figura 1.29 Denio do atributo de leitura e escrita no Microsoft Windows.
Voc pode ter de dar permisso para alterar os atributos (veja a gura 1.30).
-
8/10/2019 Android Cookbook
38/63
Android Cookbook58
Figura 1.30 Conrmao de permisso necessria.
Uma caixa de dilogo de conrmao das modicaes de atributos vai aparecer;certique-se de que a opo Aplicar as alteraes a esta pasta, subpasta e arquivosest selecionada e clique emOK. Ento, faa o seguinte:
Reinicie o computador.
Certi que-se de que todos os outros programas esto fechados, especialmentequalquer cpia do Gerenciador de Arquivos.
Execute o SDK Manager.exe na conta de administrador. Abra o menu de contextoe selecione Executar como administrador (veja a gura 1.31).
Figura 1.31 Executar como administrador.
Feche o ADB antes de atualizar. Uma mensagem pedindo que voc reinicie o ADB (o An-droid Debugger) pode aparecer (Figura 1.32).
Figura 1.32 Conrmao para reiniciar o ADB.
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. Comoalternativa voc pode utilizar o Gerenciador de Tarefas do Windows para interrom-per o adb.exe. Se o ADB no estava sendo executado, respondaNo a esse prompt; docontrrio, respondaYes.
-
8/10/2019 Android Cookbook
39/63
59Captulo 1 Primeiros passos
O SDK Manager no pode se atualizar. Durante a instalao da atualizao do SDK podehaver um erro relacionado ao programa SDK Manager (veja a gura 1.33).
Figura 1.33 Janela de log do SDK Manager do Android.
Para solucionar esse erro, certique-se de que todos os programas esto fechados(inclusive oadb.exe). Depois copie oSDK Manager.exe de C:\Arquivos de Programas\ Android\android-sdk\tools\lib para C:\Arquivos de Programas\Android\android-sdk (ouonde quer que o SDK esteja instalado). Ento execute novamente o SDK Manager(veja a gura 1.32).
Atualizao do Eclipse. Depois que voc atualizar o SDK e abrir o Eclipse, uma mensagemde erro pode aparecer (veja a gura 1.34).
Figura 1.34 Verso incorreta do SDK do Android.
No Eclipse, selecioneHelp e entoCheck for Updates. Espere at que o dilogo de progressotermine e as atualizaes do Android Eclipse sejam mostradas. Clique emNext duasvezes, e aceite os termos de licena. Ento, clique emFinish para comear o processode download e atualizao. Uma mensagem de aviso sobre contedo no assinadopode aparecer. Clique emOK para aceitar o aviso (faa isso apenas se voc estiveratualizando 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 doEclipse para Android esto disponveis no site Android Developers.
-
8/10/2019 Android Cookbook
40/63
Android Cookbook60
Veja tambmReceita 1.5; Instalao do SDK; Incluso de componentes SDK; Plugin ADT paraEclipse
1.13 Captura de tela do emulador/dispositivo AndroidRachee Singh
ProblemaVoc deseja obter uma captura de tela de um aplicativo executado em um dispositivoAndroid.
SoluoUtilize a funcionalidade Device Screen Capture da viso DDMS (Dalvik DebugMonitor Server) no Eclipse.
DiscussoPara utilizar a funcionalidade Device Screen Capture siga estes passos:
1. Execute o aplicativo no Eclipse e v at a viso DDMS (Window menu->Open Pers-pective->Other->DDMS) ouWindow menu->Show View->Other->Android->Devices; a primeira mostrada na gura 1.36). Note que a linha que diz Resourcedoes not existaparece na gura 1.35 apenas porque outro projeto Eclipse foi fechado, e noafeta os passos listados aqui.
Figura 1.35 Iniciando a viso DDMS.
-
8/10/2019 Android Cookbook
41/63
61Captulo 1 Primeiros passos
2. Na viso DDMS, selecione o dispositivo ou emulador cuja tela voc desejacapturar.
3. Na viso DDMS, clique no cone Screen Capture (veja a gura 1-36).
Figura 1.36 Captura de tela do dispositivo.
4. Uma janela mostrando a tela atual do emulador/dispositivo Android sermostrada. Ela deve se parecer com a gura 1.37. Voc pode at salvar a capturade tela e utiliz-la para descrever o aplicativo!
Figura 1.37 A captura de tela.
-
8/10/2019 Android Cookbook
42/63
Android Cookbook62
Veja tambmAlgumas distribuies fornecem modos alternativos de se obter capturas de tela.O CyanogenMod 7.x fornece uma captura de tela no menu que surge quando vocsegura pressionado o boto de ligar/desligar. Alguns tablets HTC com suporte acaneta 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: bastapressionar o controle de diminuio de volume ao mesmo tempo em que o botode ligar/desligar e a imagem sero salvos em seu dispositivo e poder ser visualizadano aplicativo de galeria.
1.14 Programa: um simples exemplo de CountDownTimerWagied Davids
ProblemaVoc deseja um simples timer regressivo, um programa que far uma contagem re-gressiva a partir de um determinado nmero de segundos at atingir zero.
SoluoO Android vem com uma classe integrada para construo deCountDownTimers. Ela
fcil de utilizar, eciente e funciona (isso nem precisa dizer!).
DiscussoOs passos para fornecer um timer regressivo so estes:
1. Crie uma subclasse deCountDownTimer. O construtor dessa classe recebe doisargumentos,CountDownTimer(long millisInFuture, long countDownInterval) . O primei-ro o nmero de milissegundos, contados a partir de agora, determinandoquando o intervalo deve estar concludo; nesse ponto o mtodoonFinish()
da subclasse ser chamado. O segundo a frequncia em milissegundos daregularidade em que voc deseja ser noticado de que o timer ainda est emexecuo, normalmente para atualizar um monitor de progresso ou comunicaro usurio de outra forma. O mtodoonTick() de sua subclasse ser chamado acada passagem desse nmero de milissegundos.
2. Substitua os mtodosonTick() e onFinish() .3. Instancie uma nova instncia em sua atividade Android.4. Chame o mtodostart() na nova instncia criada!
-
8/10/2019 Android Cookbook
43/63
63Captulo 1 Primeiros passos
O programa de exemplo de timer regressivo consiste em um layout XML (que podeser visto no exemplo 1.4) e um pouco de cdigo Java (exemplo 1.5). Quando executa-do, ele deve se parecer mais ou menos com a gura 1.38, ainda que os tempos sejamprovavelmente diferentes.
Exemplo 1.4 main.xml
Exemplo 1.5 Main.javapackage com.examples;
import android.app.Activity;import android.os.Bundle;
-
8/10/2019 Android Cookbook
44/63
Android Cookbook64
import android.os.CountDownTimer;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;
public class Main extends Activity implements OnClickListener { private MalibuCountDownTimer countDownTimer; private long timeElapsed; private boolean timerHasStarted = false; private Button startB; private TextView text; private TextView timeElapsedView; private nal long startTime = 50 * 1000; private nal long interval = 1 * 1000;
/** Chamado quando a atividade criada pela primeira vez */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startB = (Button) this. ndViewById(R.id.button); startB.setOnClickListener(this);
text = (TextView) this. ndViewById(R.id.timer); timeElapsedView = (TextView) this. ndViewById(R.id.timeElapsed); countDownTimer = new MalibuCountDownTimer(startTime, interval); text.setText(text.getText() + String.valueOf(startTime)); } @Override public void onClick(View v) { if (!timerHasStarted)
{ countDownTimer.start(); timerHasStarted = true; startB.setText("Start"); } else { countDownTimer.cancel(); timerHasStarted = false; startB.setText("RESET");
} }
-
8/10/2019 Android Cookbook
45/63
65Captulo 1 Primeiros passos
// Classe CountDownTimer public class MalibuCountDownTimer extends CountDownTimer { public MalibuCountDownTimer(long startTime, long interval) {
super(startTime, interval); } @Override public void onFinish() { text.setText("Time's up!"); timeElapsedView.setText("Time Elapsed: " + String.valueOf(startTime)); } @Override public void onTick(long millisUntilFinished) { text.setText("Time remain:" + millisUntilFinished); timeElapsed = startTime - millisUntilFinished; timeElapsedView.setText("Time Elapsed: " + String.valueOf(timeElapsed)); } } }
Figura 1.38 Reset do timer.
-
8/10/2019 Android Cookbook
46/63
Android Cookbook66
URL de download do cdigo-fonteO cdigo-fonte para esse exemplo est no repositrio do Android Cookbook,em http://github.com/AndroidCook/Android-Cookbook-Examples , no subdiretrioCountDownTimerExample (veja Obteno e uso de exemplos de cdigo na pgina 20).
1.15 Programa: Tipster, um calculador de gorjetas para o Android OSSunit Katkar
ProblemaQuando 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 percentualda gorjeta ao total e divida o valor pelo nmero de presentes. O Tipster uma imple-mentao disso no Android, para mostrar um aplicativo completo.
SoluoEste um exerccio simples que utiliza os elementos bsicos da GUI ( graphical userinterface, ou interface grca de usurio), combinando-os a alguns clculos simplese 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 vocutilize o paradigma da tag HTMLTable para posicionar os widgets.
TableRow
Dene uma linha noTableLayout . como as tags HTMLTR e TD combinadas.
TextView
EssaView fornece um rtulo para apresentao de texto esttico na tela.
EditText
EssaView fornece um campo de texto para entrada de valores.
RadioGroup
Agrupa botes de opo.
RadioButtonFornece um boto de opo.
-
8/10/2019 Android Cookbook
47/63
67Captulo 1 Primeiros passos
Button
Esse o boto normal.
View
Ns utilizaremos umaView para criar um separador visual com certos atributosde altura e cor.
DiscussoO Android utiliza arquivos XML para o layout de widgets. Em nosso projeto deexemplo, o plugin do Android para Eclipse gera um arquivomain.xml para o layout.Esse arquivo tem as denies XML dos vrios widgets e de seus contineres.
H um arquivostrings.xml que tem todos os recursos de strings utilizados no aplicativo.
Um arquivoicon.png padro fornecido para o cone do aplicativo.E h tambm o arquivoR.java que gerado automaticamente (e atualizado quandoquaisquer alteraes so feitas aomain.xml). Esse arquivo tem as constantes denidaspara cada layout e widget. No edite esse arquivo manualmente; o plugin far issopara voc ao efetuar qualquer modicao em seus arquivos XML.
Em nosso exemplo temosTipster.java como o arquivo Java principal para aActivity .
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 resultadonal ser um layout de projeto que se parecer com o da gura 1.39.
Criao do layout e posicionamento dos widgets
O objetivo nal criar um layout semelhante quele mostrado na gura 1.39.
Para o layout dessa tela voc vai utilizar estes layouts e widgets:
TableLayout
Fornece controle adequado sobre o layout da tela. Esse layout permite que vocutilize o paradigma da tag HTMLTable para posicionar os widgets.
TableRow
Dene uma linha noTableLayout . como as tags HTMLTR e TD combinadas.
TextView
EssaView fornece um rtulo para apresentao de texto esttico na tela.
EditText
EssaView fornece um campo de texto para entrada de valores.
-
8/10/2019 Android Cookbook
48/63
Android Cookbook68
RadioGroup
Agrupa botes de opo.
RadioButton
Fornece um boto de opo.Button
Esse o boto normal.
View
Ns utilizaremos umaView para criar um separador visual com certos atributosde altura e cor.
Familiarize-se com esses widgets j que voc vai utiliz-los bastante nos aplicativos queconstruir. Ao vericar os Javadocs relacionados a layouts e widgets, d uma olhadanos atributos XML. Isso vai ajud-lo a correlacionar o uso no arquivo de layoutmain. 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 comouma ferramenta independente de UI chamada DroidDraw, ambas as quais permitemque voc crie um layout arrastando e soltando widgets a partir de uma paleta, comoqualquer ferramenta de design de formulrios. No entanto, recomendo que voc crie olayout mo em XML, pelo menos nos estgios iniciais de seu aprendizado Android.Futuramente, medida que aprender todas as nuances da API de layout XML, vocpoder delegar essa tarefa a tais ferramentas.
O arquivo de layout,main.xml , tem as informaes de layout (veja o exemplo 1.6). UmwidgetTableRow cria uma nica linha dentro doTableLayout . Por isso voc utiliza tantasTableRows quanto for o nmero de linhas que deseja. Neste tutorial, vamos utilizar oitoTableRows cinco para os widgets at o separador visual abaixo dos botes, e trs paraa rea de resultados abaixo dos botes e do separador.
Exemplo 1.6 /res/layout/main.xml
-
8/10/2019 Android Cookbook
49/63
69Captulo 1 Primeiros passos
por duas colunas. Assim, um total de 4 colunas nesta linha -->
-
8/10/2019 Android Cookbook
50/63
Android Cookbook70
text eld para entrada de um percentual personalizado de gorjeta -->
-
8/10/2019 Android Cookbook
51/63
71Captulo 1 Primeiros passos
android:text="@string/btnCalculate"/>
-
8/10/2019 Android Cookbook
52/63
Android Cookbook72
android:layout_column="0" android:text="@string/textLbl6"/>
TableLayout e TableRow
Depois de analisarmain.xml , voc pode perceber queTableLayout eTableRow so simplesde usar. Voc cria oTableLayout uma vez, e ento insere umaTableRow. Agora voc estlivre para inserir quaisquer outros widgets, comoTextView, EditView e assim por diante,dentro dessaTableRow.
No deixe de dar uma olhada nos atributos, especialmente emandroid:stretchColumns ,android:layout_column eandroid:layout_span , os quais permitem que voc posicione widgetsda mesma forma que voc faria com uma tabela HTML comum. Recomendo que vocsiga os links para esses atributos e aprenda como eles funcionam em umTableLayout.
Controle de valores de entradaD uma olhada no widgetEditText , marcado no arquivomain.xml como . Esse oprimeiro campo de texto para entrada do Valor total da conta. Queremos apenasnmeros aqui. Podemos aceitar nmeros decimais porque contas de restaurantesreais tambm podem ter valores em centavos, e no apenas nmeros inteiros. Por issoutilizamos o atributoandroid:numeric com um valor dedecimal . Isso permitir valoresde nmeros inteiros, como 10, e valores decimais, como 10.12, mas impedir qualqueroutro tipo de entrada.
Essa uma forma simples e concisa de controlar valores de entrada, economizando-noso trabalho de escrever cdigo de validao no arquivoTipster.java , e garantindo queo usurio no digite valores errados. Essa funcionalidade do Android de limitaocom base em XML bastante poderosa e til. Voc deve explorar todos os atributospossveis que acompanham um widget especco para extrair o mximo de benef-cios desse modo XML abreviado de denir restries. Em um lanamento futuro, ano ser que eu no tenha visto isso nesta verso, eu espero que o Android permita aentrada de intervalos para o atributoandroid:numeric , de modo que voc possa denirqual intervalo de nmeros deseja aceitar.
-
8/10/2019 Android Cookbook
53/63
73Captulo 1 Primeiros passos
Como (at onde eu sei) intervalos atualmente no esto disponveis, voc ver futu-ramente que temos realmente de vericar a presena de certos valores, como zero ouvalores vazios, para garantir que as contas de nosso calculador de gorjeta no falhem.
Anlise do Tipster.javaAgora vamos analisar o arquivoTipster.java que controla nosso aplicativo. Essa aclasse principal que cuida do layout, do tratamento de eventos e da lgica do aplicativo.
O plugin do Eclipse para Android cria o arquivoTipster.java em nosso projeto como cdigo padro que pode ser visto no exemplo 1.7.
Exemplo 1.7 Trecho de cdigo 1 de /src/com/examples/tipcalc/Tipster.javapackage com.examples.tipcalc;
import android.app.Activity;
public class Tipster extends Activity { /** Chamado quando a atividade criada pela primeira vez */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }}
A classeTipster estende a classeandroid.app.Activity . Uma atividade uma nica aoconcentrada que o usurio pode realizar. A classeActivity cuida de criar a janela edepois de apresentar a UI. Voc tem de chamar o mtodosetContentView(View view) paracolocar sua UI naActivity . Por isso, pense emActivity como uma moldura externaque est vazia, e que voc preenche com sua UI.
Agora verique o trecho da classeTipster.java que pode ser visto no exemplo 1.8. Pri-meiro, denimos os widgets como membros de classe. Verique, mais especicamente,de a para referncia.
Ento, utilizamos o mtodofndViewById(int id) para localizar os widgets. O ID de cadawidget, denido em seu arquivomain.xml , automaticamente denido no arquivoR.java quando voc limpa e compila o projeto no Eclipse. (Se voc congurou o Eclipsepara compilar automaticamente, o arquivoR.java ser atualizado instantaneamentequando voc atualizarmain.xml.)
Cada widget derivado da classeView, e fornece funcionalidades GUI especiais. Assim,uma TextView fornece uma forma de colocar rtulos na UI, enquanto que oEditText fornece um campo de texto. Verique de a no exemplo 1.8. Voc pode ver comofndViewById() utilizado para localizar os widgets.
-
8/10/2019 Android Cookbook
54/63
Android Cookbook74
Exemplo 1.8 Trecho de cdigo 2 de /src/com/examples/tipcalc/Tipster.javapublic class Tipster extends Activity { // Widgets do aplicativo private EditText txtAmount;
private EditText txtPeople; private EditText txtTipOther; private RadioGroup rdoGroupTips; private Button btnCalculate; private Button btnReset;
private TextView txtTipAmount; private TextView txtTotalToPay; private TextView txtTipPerPerson;
// Para o id do boto de opo selecionado private int radioCheckedId = -1;
/** Chamado quando a atividade criada pela primeira vez */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
// Acessa os vrios widgets por id em R.java txtAmount = (EditText) ndViewById(R.id.txtAmount); // No carregamento do aplicativo, o cursor deve estar no campo Amount
txtAmount.requestFocus();
txtPeople = (EditText) ndViewById(R.id.txtPeople); txtTipOther = (EditText) ndViewById(R.id.txtTipOther);
rdoGroupTips = (RadioGroup) ndViewById(R.id.RadioGroupTips);
btnCalculate = (Button) ndViewById(R.id.btnCalculate); // No carregamento do aplicativo, o boto Calculate est desabilitado btnCalculate.setEnabled(false);
btnReset = (Button) ndViewById(R.id.btnReset);
txtTipAmount = (TextView) ndViewById(R.id.txtTipAmount); txtTotalToPay = (TextView) ndViewById(R.id.txtTotalToPay); txtTipPerPerson = (TextView) ndViewById(R.id.txtTipPerPerson);
// No carregamento do aplicativo, desabilite o campo de texto Other Tip PercentagetxtTipOther.setEnabled(false);
Lidando com consideraes de facilidade de uso ou usabilidade
Nosso aplicativo deve tentar ser to utilizvel quanto qualquer outro aplicativo oupgina web consolidado. Em resumo, incluir recursos de usabilidade resultar em
uma boa experincia de usurio. Para lidar com essas consideraes, d uma olhadano exemplo 1.8 novamente.
-
8/10/2019 Android Cookbook
55/63
75Captulo 1 Primeiros passos
Veja , onde utilizamos o mtodorequestFocus() da classeView. Como o widgetEditText derivado da classeView, esse mtodo aplicvel a ele. Isso feito para que, quandonosso aplicativo carregar, o campo de textoTotal Amount receba foco e o cursor seja po-sicionado 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 , onde o boto Calculate desabilitado chamando o mtodosetEnabled(boolean enabled) no widgetButton. Isso feito para que o usurio no possaclicar nele antes de digitar valores nos campos obrigatrios. Se permitssemos queo usurio clicasse emCalculate sem digitar valores nos camposTotal Amount e No. of People,teramos de escrever um cdigo de validao para capturar essas condies. Isso signi-caria mostrar um alerta em popup avisando o usurio dos valores vazios. Algo dessetipo adicionaria cdigo e interao de usurio desnecessrios. Quando o usurio v
o botoCalculate
desabilitado, ca bastante bvio que, a no ser que todos os valoressejam digitados, a gorjeta no poder ser calculada.
Verique no exemplo 1.8. Aqui o campo de textoOther Tip Percentage est desabilitado.Isso feito porque o boto de opo 15% tip selecionado por padro quando oaplicativo carrega. Essa seleo padro no carregamento do aplicativo feita por meiodo arquivomain.xml . D uma olhada na linha demain.xml onde a instruo a seguirseleciona o boto de opo 15% tip:
android:checkedButton="@+id/radioFifteen"
O atributoandroid:checkedButton deRadioGroup permite que voc selecione um dos widgetsRadioButton no grupo por padro.
A maioria dos usurios que j utilizou aplicativos populares no desktop ou na webest familiarizada com o paradigma widgets desabilitados que so habilitados emcertas condies. Incluir essas pequenas convenincias sempre torna um aplicativomais utilizvel e a experincia do usurio mais rica.
Processamento de eventos da UI
Semelhante aos populares frameworks de UI do Windows, Java Swing, Flex e outros, oAndroid tambm fornece um modelo de eventos que permite a voc escutar determi-nados eventos na UI provocados pela interao do usurio. Vejamos como podemosutilizar o modelo de eventos do Android em nosso aplicativo.
Primeiro, vamos nos concentrar nos botes de opo da UI. Queremos saber qualboto de opo o usurio selecionou, uma vez que isso nos permitir determinar opercentual de gorjeta em nossos clculos. Para escutar botes de opo, utilizamosa interface estticaOnCheckedChangeListener(). Isso vai nos noticar quando o estado de
seleo de um boto de opo mudar.
-
8/10/2019 Android Cookbook
56/63
Android Cookbook76
Em nosso aplicativo, queremos habilitar o campo de textoOther Tip Percentage apenasquando o boto de opoOther estiver selecionado. Quando os botes 15% tip e20% tip estiverem selecionados, ns queremos desabilitar esse campo de texto. Almdisso, queremos incluir um pouco mais de lgica em nome da usabilidade. Como
discutimos antes, no devemos habilitar o botoCalculate at que todos os camposobrigatrios tenham valores vlidos. Em termos dos trs botes de opo, queremosgarantir que o botoCalculate esteja habilitado para as duas condies a seguir:
O boto de opo Other est selecionado e o campo de textoOther Tip Percentage tem valores vlidos.
Os botes de opo 15% tip ou 20% tip esto selecionados e os campos detexto 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.
Exemplo 1.9 Trecho de cdigo 3 de /src/com/examples/tipcalc/Tipster.java/** Anexa um OnCheckedChangeListener ao grupo de opo* para monitorar botes de opo selecionados pelo usurio*/rdoGroupTips.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) { // Habilita/desabilita o campo Other Tip Percentage
if (checkedId == R.id.radioFifteen || checkedId == R.id.radioTwenty) { txtTipOther.setEnabled(false); /* * Habilita o boto Calculate se os campos Total
* Amount e No. of People tiverem valores vlidos */ btnCalculate.setEnabled(txtAmount.getText().length() > 0 && txtPeople.getText().length() > 0); } if (checkedId == R.id.radioOther) { // Habilita o campo Other Tip Percentage
txtTipOther.setEnabled(true); // de ne o foco para este campo txtTipOther.requestFocus(); /* * Habilita o boto Calculate se os campos Total Amount e No. of People tiverem
* valores vlidos. Tambm assegura que o usurio digitou um valor em Other Tip
* Percentage antes de habilitar o boto Calculate */
-
8/10/2019 Android Cookbook
57/63
77Captulo 1 Primeiros passos
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; }});
Monitorando atividade de teclas em campos de texto
Como mencionei antes, o botoCalculate no deve ser habilitado a no ser que oscampos de texto tenham valores vlidos. Ento temos de garantir que o botoCalculate seja habilitado apenas se os campos de textoTotal Amount, No. of People e Other Tip Percentage tiverem valores vlidos. O campo de textoOther Tip Percentage ser habilitado apenas seo boto de opoOther Tip Percentage for selecionado.
No temos de nos preocupar com o tipo dos valores, ou seja, se o usurio digitouou no nmeros negativos ou letras, pois o atributoandroid:numeric foi denido paraos campos de texto, limitando, dessa forma, os tipos de valores que o usurio podedigitar. Temos apenas de garantir que os valores estejam presentes.
Ento utilizamos a interface estticaOnKeyListener() . Ela vai nos noticar quando umatecla for pressionada. A noticao chegar at ns antes de a tecla pressionada em si
ser enviada para o widgetEditText .Verique o cdigo nos exemplos 1.10 e 1.11, que lidam com eventos de teclas emcampos de texto. Assim como no exemplo 1.9, os comentrios do cdigo-fonte sobastante autoexplicativos.
Exemplo 1.10 Trecho de cdigo 4 de /src/com/examples/tipcalc/Tipster.java/** Anexa um KeyListener aos campos de texto Tip Amount, No. of People* e Other Tip Percentage*/txtAmount.setOnKeyListener(mKeyListener);txtPeople.setOnKeyListener(mKeyListener);txtTipOther.setOnKeyListener(mKeyListener);
Note que criamos apenas um ouvinte, em vez de criar ouvintes annimos/internospara cada campo de texto. No tenho certeza se meu estilo melhor ou recomendado,mas sempre escrevo dessa forma se os ouvintes vo realizar aes habituais. Aqui, apreocupao comum a todos os campos de texto que eles no devem estar vazios,
e apenas quando tiverem valores que o botoCalculate deve ser habilitado.
-
8/10/2019 Android Cookbook
58/63
Android Cookbook78
Exemplo 1.11 Trecho de cdigo 5 de KeyListener.java/** KeyListener para os campos de texto Total Amount, No of People e Other Tip* Percentage. Precisamos aplicar esse ouvinte de teclas para veri car estas condies:
** 1) Se o usurio selecionar Other Tip Percentage, o campo de texto Other Tip Percentage* deve ter um percentual de gorjeta vlido inserido pelo usurio. Habilite o* boto Calculate apenas quando o usurio digitar um valor vlido.** 2) Se o usurio no digitar valores nos campos Total Amount e No. of People,* no poderemos realizar os clculos. Assim, habilitaremos o boto Calculate* apenas quando o usurio digitar valores vlidos.*/private OnKeyListener mKeyListener = new OnKeyListener() {
@Override public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (v.getId()) { case R.id.txtAmount: case R.id.txtPeople: btnCalculate.setEnabled(txtAmount.getText().length() > 0 && txtPeople.getText().length() > 0); break; case R.id.txtTipOther: btnCalculate.setEnabled(txtAmount.getText().length() > 0 && txtPeople.getText().length() > 0 && txtTipOther.getText().length() > 0); break; } return false; }};
Em no exemplo 1.11, analisamos o ID daView. Lembre-se de que cada widget temum ID nico denido no arquivomain.xml . Esses valores so, ento, denidos naclasseR.java gerada.Em e , se o evento-chave ocorreu nos camposTotal Amount ouNo. of People, vericamoso valor digitado no campo. Estamos garantindo que o usurio no tenha deixadoambos os campos em branco.
Em , vericamos se o usurio selecionou o boto de opoOther, e ento garantimosque o campo de textoOther no esteja vazio. Tambm vericamos mais uma vez se oscamposTotal Amount e No. of People esto vazios.
Assim, o propsito de nossoKeyListener agora est claro: garantir que todos os camposde texto no estejam vazios, e apenas ento habilitar o botoCalculate.
-
8/10/2019 Android Cookbook
59/63
79Captulo 1 Primeiros passos
Escutando cliques em botes
Agora vamos vericar os botesCalculate e Reset. Quando o usurio clicar nesses bo-tes, utilizaremos a interface estticaOnClickListener() que nos informar quando umboto for clicado.
Como zemos com os campos de texto, criamos apenas um ouvinte e, dentro dele,detectamos qual boto foi clicado. Dependendo do boto que foi clicado, o mtodocalculate() ou reset() ser chamado.
O exemplo 1.12 mostra como o ouvinte de cliques adicionado aos botes.
Exemplo 1.12 Trecho de cdigo 6 de /src/com/examples/tipcalc/Tipster.java/* Anexa um ouvinte aos botes Calculate e Reset */btnCalculate.setOnClickListener(mClickListener);btnReset.setOnClickListener(mClickListener);
O exemplo 1.13 mostra como detectar qual boto foi clicado vericando o ID daView que recebe o evento de clique.
Exemplo 1.13 Trecho de cdigo 7 de /src/com/examples/tipcalc/Tipster.java/*** ClickListener para os botes Calculate e Reset.* Dependendo do boto clicado, o mtodo correspondente ser chamado.
*/private OnClickListener mClickListener = new OnClickListener() {
@Override public void onClick(View v) { if (v.getId() == R.id.btnCalculate) { calculate(); } else { reset(); }
}};
Reset do aplicativo
Quando o usurio clicar no botoReset, os campos de texto devero ser limpos, oboto de opo-padro 15% tip dever ser selecionado, e quaisquer resultadoscalculados devero ser limpos.
O exemplo 1.14 mostra o mtodoreset() .
-
8/10/2019 Android Cookbook
60/63
Android Cookbook80
Exemplo 1.14 Trecho de cdigo 8 de /src/com/examples/tipcalc/Tipster.java/*** Faz o reset das vises de texto dos resultados na parte inferior da tela,* assim como dos campos de texto e dos botes de opo.
*/private void reset() { txtTipAmount.setText(""); txtTotalToPay.setText(""); txtTipPerPerson.setText(""); txtAmount.setText(""); txtPeople.setText(""); txtTipOther.setText(""); rdoGroupTips.clearCheck(); rdoGroupTips.check(R.id.radioFifteen);
// de ne o foco no primeiro campo txtAmount.requestFocus();}
Validao da entrada para calcular a gorjeta
Como eu disse antes, estamos limitando o tipo de valor que o usurio pode digitarnos campos de texto. No entanto, o usurio ainda pode digitar um valor de zero noscampos de texto Total Amount, No. of People e Other Tip Percentage, provocando, dessa forma,condies de erro, como diviso por zero, em nossos clculos de gorjetas.
Se o usurio digitar zero, devemos mostrar um popup de alerta pedindo que digiteum valor diferente de zero. Lidaremos com isso utilizando um mtodo chamadoshowErrorAlert(String errorMessage, fnal int feldId) , mas discutiremos isso mais deta-lhadamente no futuro.
Primeiro, verique o exemplo 1.15, o qual mostra o mtodocalculate() . Note como osvalores digitados pelo usurio so processados como valores do tipoDouble.
Agora perceba e , onde vericamos a presena de valores iguais a zero. Se o usurio
digitar zero, mostraremos um popup de alerta para avis-lo. Depois, verique , ondeo campo de textoOther Tip Percentage habilitado porque o usurio selecionou o botode opoOther. Aqui tambm devemos vericar se o percentual de gorjeta no zero.
Quando o aplicativo carregar, o boto de opo 15% tip ser selecionado por padro.Se o usurio modicar a seleo, atribuiremos o ID do boto de opo selecionado varivel membroradioCheckedId , como vimos no exemplo 1.9, emOnCheckedChangeListener.
Mas se o usurio aceitar a seleo padro, oradioCheckedId ter o valor padro de1.Em resumo, nunca saberemos qual boto de opo foi selecionado. Ns sabemos,
claro, qual est selecionado por padro, e poderamos ter codicado a lgica de modo
-
8/10/2019 Android Cookbook
61/63
81Captulo 1 Primeiros passos
levemente diferente, para presumir 15% seradioCheckedId tiver o valor de1. Mas sevoc consultar a API, ver que podemos chamar o mtodogetCheckedRadioButtonId() noRadioGroup e no em botes individuais de opo. Isso ocorre porqueOnCheckedChangeListener nos fornece prontamente o ID do boto de opo selecionado.
Apresentao dos resultados
Calcular a gorjeta simples. Se no houver nenhum erro de validao, a ag boole-ana isError ser false . Verique de a no exemplo 1.15 para observar os clculossimples da gorjeta. Na sequncia, os valores calculados sero denidos nos widgetsTextView de a .
Exemplo 1.15 Trecho de cdigo 9 de /src/com/examples/tipcalc/Tipster.java
/*** Calcule a gorjeta de acordo com os dados digitados pelo usurio*/private void calculate() { Double billAmount = Double.parseDouble(txtAmount.getText().toString()); Double totalPeople = Double.parseDouble(txtPeople.getText().toString()); Double percentage = null; boolean isError = false; if (billAmount < 1.0) { showErrorAlert("Enter a valid Total Amount.", txtAmount.getId());
isError = true; } if (totalPeople < 1.0) { showErrorAlert("Enter a valid value for No. of People.", txtPeople.getId()); isError = true; }
/* * Se o usurio nunca modi car sua seleo de opo,
* signi ca que a seleo padro de 15% est em efeito. Mas mais seguro veri car
*/ if (radioCheckedId == -1) { radioCheckedId = rdoGroupTips.getCheckedRadioButtonId(); } if (radioCheckedId == R.id.radioFifteen) { percentage = 15.00; } else if (radioCheckedId == R.id.radioTwenty) { percentage = 20.00; } else if (radioCheckedId == R.id.radioOther) { percentage = Double.parseDouble(
txtTipOther.getText().toString()); if (percentage < 1.0) {
-
8/10/2019 Android Cookbook
62/63
Android Cookbook82
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()); }}
Apresentao dos alertas
O Android fornece a classeAlertDialog para mostrar popups de alerta. Isso nos permitemostrar uma caixa de dilogo com at trs botes e uma mensagem.
O exemplo 1.16 mostra o mtodoshowErrorAlert , o qual utiliza esseAlertDialog para mostraras mensagens de erro. Perceba que informamos dois argumentos a esse mtodo:Stringerror Message e int feldId . O primeiro argumento a mensagem de erro que queremosmostrar ao usurio. OfeldId o ID do campo que causou a condio de erro. Depoisque o usurio dispensar o dilogo de alerta, essefeldId nos permitir solicitar o focopara esse campo, de modo que o usurio saiba qual campo contm o erro.
Exemplo 1.16 Trecho de cdigo 10 de /src/com/examples/tipcalc/Tipster.java/*** Mostra a mensagem de erro no dilogo de alerta
** @param errorMessage* String a ser mostrada pela mensagem de erro* @param eldId* o Id do campo que provocou o erro. Isso necessrio para que o foco possa ser de nido* nesse campo assim que o dilogo for dispensado.*/private void showErrorAlert(String errorMessage,
nal int eldId) { new AlertDialog.Builder(this).setTitle("Error")
.setMessage(errorMessage).setNeutralButton("Close", new DialogInterface.OnClickListener() {
-
8/10/2019 Android Cookbook
63/63
83Captulo 1 Primeiros passos
@Override public void onClick(DialogInterface dialog,
int which) { ndViewById( eldId).requestFocus(); }
}).show();}
Quando reunimos tudo isso, o resultado deve car como a gura 1.39.
Figura 1.39 Tipster em ao.
Concluso
O desenvolvimento para o OS Android no to diferente do desenvolvimento paraqualquer kit de ferramentas de UI, incluindo Microsoft Windows, X Windows, JavaSwing ou Adobe Flex. O Android tem, claro, suas diferenas e, em geral, um designmuito bom. O paradigma de layout em XML muito interessante e til para criaode UIs complexas utilizando XML simples. Alm disso, o modelo de tratamento deeventos simples, rico em funcionalidades e intuitivo de se utilizar no cdigo.
URL de download do cdigo-fonteVoc pode efetuar o download do cdigo-fonte para esse exemplo emhttp://www.