You are on page 1of 127
FJ-57 Desenvolvimento mével com Google Android Hello World! \ a Ca e | um Ensino e Inovagao www.caelum.com.br T | Cael um Ensino e Inovagao A Caelum atua no mercado com consultoria, desenvolvimento © ensino em computagéio. Sua equipe Participou do desenvolvimento de projetos em varios clientes e, apés apresentar os cursos de verdo de Java ha Universidade de Sao Paulo, passou a oferecer treinamentos para 0 mercado. Toda a equipe tem uma forte presenga na comunidade através de eventos, artigos em diversas revistas, participagio em muitos projetos open source como o VRaptor @ 0 Stella e atuagao nos foruns e listas de discussao como 0 GUV. Com uma equipe de mais de 60 protissionais altamente qualificados © de destaque do mercado, oferece treinamentos em Java, Ruby on Rails e Scrum em suas trés unidades - Séo Paulo, Rio de Janeiro e Brasilia. Mais de 8 mil alunos jé buscaram qualificagao nos treinamentos da Caelum tanto em nas unidades ‘como nas préprias empresas com os cursos incompany. © compromisso da Caelum @ oferecer um treinamento de qualidade, com material constantemente atualizado, uma metodologia de ensino cuidadosamente desenvolvida e instrutores capacitados tecnicamente e didaticamente. E oferecer ainda servigos de consultoria agil, mentoring e desenvolvimento de projetos sob medida para empresas. Comunidade Nossa equipe escreve constantemente artigos no Blog da Caelum que ja conta com 150 artigos sobre varios assuntos de Java, Rails e computacao em geral. Visite-nos e assine nosso RSS: ‘= blog.caelum.com.br = twitler.com/caelumdeviequipe © GUY maior forum de Java em lingua portuguesa, com 700 mil posts e 70 mil usuarios. As pessoas da Caelum participam ativamente, participe tambem: = www.guj.com.br = \@ Assine também nossa Newsletter para receber as novidades e destaques dos, eventos, artigos e promogdes da Caelum: = www.caelum.com.brinewsletter No site da Caelum ha algumas de nossas Apostilas disponiveis gratuitamente para download e alguns dos artigos de destaque que escrevemos: > wwnw.caelum.com.br/apostilas = www.caelum.com.br/artigos indice 1 Android e HelloWorld 1.4. Dispositivos Android 1.2. Instalagao do Android 1.3 Instalagao do Plugin no Eclipse 1.4 Simulador do Android 1.5 Exercicio: HelloWorld 1.6 Entendendo 0 que foi gorado 2 Um pouco de teoria 24. Activity 22 Service 23 Intents 2.4 Receptores de Broadcast 25. Provedores de Contedido 2.6 Widgets 27 Notifications . 28 Os recursos e a pasta res 29 java 2.10 AndroidManifest.xml e seu editor 3. Deploy 3.1. Distribuindo sua aplicagao 3.2. Gerando um Certificado Digital 3.3. Assinando sua aplicacao 3.4 Android Market eoo2aan 12 13, 15 18 15 16 16 16 16 18 19 21 24 24 22 26 4 Mais componentes de tela 4.1 TextView ae alle ee ee eee 4.3. Button 4.4. ImageButton 45. Spinner 46 ListView 4,7, RadioGroup e RadioButton 48 CheckBox 4.9 ImageView . . 4.10 Gallery 4.11 Toast 4.12 Alerta 4.13 Atributos XML Layouts 5.1 LinearLayout 52 TabloLayout 5.3. AbsoluteLayout 5.4 Muitas Tolas Cadastro de alunos 6.1 O projeto CadastroCaelum 62 Toast 6.3. Exercicio: integrando 0 Toast 6.4 Menus 65 Chamando Activity’s Persistencia com SQLite 7.1, Modelo 7.2 nosso DAO 7.3. Um pouco de SQL ¢ a criagao do banco 7.4 Outros métodos para nosso DAO 7.5. Método inserit 7.6 Método buscarAlunos 7.7 Ligando tudo! 38 38 39 40 40 42 42 45 45 a7 49 55 55 87 58 59 59 60 61 -—- ome om ore see a a a | 8 Conectividade 81 JSON 82 Enviando 83 progressBar 8.4 Tudo juntoll! 9 Camera e arquivos 9.1, SharedPreferences 9.2 Camera 93. Exercicio 9.4 Galeria de Fotos 10 Intents 10.1 Ligando para 0 Aluno 10.2 Enviando um SMS para o Aluno 10.3 Navegando no site do Aluno 10.4 Achando no Mapa 11 Service's 11.1 Recebendo SMS 11.2 Tocando MP3 12 Mapa com GPS 12.1 GPS 12.2 Conseguindo uma GooglekKey 12.3 Me achando no mapa 12.4 Achando 0s alunos 13 Componente Customizado 13.1 Construindo uma View 13.2 O método onDraw(Canvas canvas) . . 13.3 Inserindo uma view no Layout 1.4 Capturando Eventos 13.5 Exor 65 66 66 69 n n 73 76 76 7 7 79 at at 82 83 83 83 84 87 89 89 90 90 1 a1 14 Apéndice - Widgets 14.1 O Inicio 14.2 AndroidManitest.xm! 14.3 Metadados 14.4 O Layout . 14.5 Criando 0 nosso AppWidgetProvider 14.6 Adicionando um Widget no Android. 14.7 Exercicio Opcional 415 Apéndice - Notiticagoes 15.1 Criando a notiicagao 152 OControle . . 15.3 Removendo uma notiticagao 15.4 Exercicio 16 Apéndice - OpenGL 16.1 Entendendo a terceira dimensaio 16.2 Criando uma tela preta? 16.3 Construindo um modelo 16.4 Luzes 16.5 Material 16.6 Animando 16.7 Um pouco de textura 16.8 Medindo quadros por segundo 17 Apéndice - Sensores 17.4 SensorManager . . 17.2 Tipos de Sensores 17.3 Escutando os sensores 18 Apéndice - Bluetooth 18.1 Um pouco de historia 18.2 As classes do Bluetooth 18.3 Inicializacao do dispositive 18.4 Encontrando dispositivos 93 93 94 95 96 96 7 97 98 99 100 100 101 103 105 108 107 108 112 114 114 14 116 "7 117 118 118 118 = mm mm mm mm im i _ meme eee eee elo = wee 18.5 Sendo encontrado 18.6 Conectando Server e Client 18.7 Controlando as conexses 18.8 PUSH 18.9 Exercicio Versio: 13.1.30 118 119 119 119 119 ae CapiTuLo Android e HelloWorld ‘Alualmente, o poder de processamento dos celulares e outros aparelhos méveis salta a vista. Com esse avango, também ha sensiveis methorias nas telas e na usabilidade desses dispositivos, Imagine 0 quao elegante seria, nesse cenério, poder mostrar seu portfolio de aplicacdes ja diretamente na ‘sua mo, sem necessidade de sequer um laptop? Por essas e outras raz6es, plataformas méveis como Blackberry, iOS e Android, estéo cada vez mais em evidéncia e 0 mercado para tais dispositivos esta em plena ascensao. A explosao do Android 6 a mais recente dentre essas plataformas, e seu crescimento nao tem previsao de declinio. © Android 6 um sistema operacional que roda sobre o niicleo Linux. Ele foi inicialmente desenvolvido pela Android Inc., e depois passou para as maos do Google (que a comprou em 2005) e posteriormente pela Open Handset Alliance. A plataforma permite que os desenvolvedores escrevam software na linguagem Java ontrolando 0 dispositivo via bibliotecas desenvolvidas pela Google, com o objetivo de ser uma plataforma flexivel, aberta e de facil migragao para os fabricantes. [Siteparadeservolvedores ———OSt—C Tnstall New Software -> Add Neste momento, vamos colocar 0 enderego do plugin como segue: htps:/dl-ssl.google.com/android/eclipse/ | ome: [android ] | cation: its gel convanaoidedipse } ‘Aguarde 0 Eclipse trazer 0 nome © verso de plugins nesse site. Em seguida, marque os checkboxes do Developer Tools, como indicado abaixo, ¢ contirme. Capitulo 1 Android e HelloWorld -nstalagae do Plugin no Eclipse - Pagina 3 Desenvolvimento mével com Google Andis (econ oa irk wit: (RipsTislanogecombecodeand Find more software by working with the ‘avilable Software Sites" preferences (asian sincetnen eens 12-6 Android OOS (09.7.v201005071157-36220 | 4 Android Development Toots 0.9:74201005071157:26220 Details Features that ad Android support to Eclipse for aplication developers. |@ Show only the latest versions of avallabe software (Hide items that are already installed {@ Group items by category What is already installed? {@ Contact all update sites during install to find required software Entdo, sera necessério reiniciar 0 Eclipse. Para terminar a preparagao do ambiente no Eclipse, falta apenas Configurar a localizacao da SDK do Android a ser utiizada, Va em window -> Preferences -> Android e indique a SDK Location, como abaixo: Capitulo 1 - Android e HeloWorld - Instalacdo do Plugin no Eclipse - Pagina 4 1 cackn—ipsivmn cack com be Desenvohimerto née om Google Ano ‘Android mas : mene aa) ® comet Maat é sp etic ¢ tele ete Te it Sep now ated oc yo a 2 ae ae epee ii cet, A Meet ondonanehse || @ Rios tandis—tadopmsoweerans 133 | @ ms Conger Groene Bo | 2 macoman tandie —— taraderensoe moist | = Conjesns rage uo || oom amine Nouseensaames 283 | Coopers Grae m3 | trandvei ——srandopensouerniec’ «= 3018 | Coogee Grae moos | teacup srandosensonceies hate’? | Ceo tne Ganga Ziepine || wands ausogmsnaetont 22 | oye tre ange Boe | Com esta instalagdo o seu Eclipse estard preparado para gerenciar projetos Android, chamar 0 emulador e controlar as fungdes de debug e simulagao de periféricos como GPS e envio de SMS/MMS. |.4~Simulador do Android Para rodar um simulador de Android, é preciso contiguré-lo no Eclipse. Vamos criar um Virtual Device no Android SDK e usar a verso do OS com a API do Google. Siga as instrugées do instrutor sobre a verso (Target) a ser utilizada no curso. a Capitulo 1 - Android ¢ HelloWorld - Simolador do Android - Pagina 5 O cooum-nipsnomncocumcomy Desenvoerto vel com Google Anold reate new Android Virtual Device (AVD) Name: Simulador Target: ‘SD Card: | @ Size: File: : Skil oT @ Built-in: Resolution: | Salty cs) Hardware: sa “ Abstracted LCD densit 160 Override the existing AVD with the same name Pronto! Agora vocé ja consegue simular suas aplicagdes no Android virtual e utilizar os servigos pré-prontos da plataforma, Basta escolher 0 AVD e clicar em Start “1.5- Exercicio: HelloWorld Como todo inicio de aprendizado, nosso primeiro projeto sera um Hello World. Criar uma aplicagao inicial para Android é muito fac Capitulo 1 - Android e HolloWorld - Exerccio: HeloWorld - Pagina 6 ee em em eee ~~ om 1B cactum — httpiiyw.caelum.com.br Desenvolvimento mével com Google Android ‘Vamos criar um projeto em branco, e preencher nome da aplicagao e pacotes de instalacao. Siga os passos abaixo. 1) No Eclipse, va em New... e escolha Android Project: Select a wizard — 1 foal est Project i dod 9M Fe ® eohttze) Gaal 2) Na tela de criacdo, preencha o nome do Projeto, a verso da SDK (de acordo com a SDK escolhida na criagao do Simulador) e o pacote das classes. Preencha como na seguinte figura’ Capitulo 1 - Android ¢ HelloWorld- Exercicio: HeloWorld - Pagina 7 1D caokim- npn caohen comb Deserolnerio vel com Goole And a) tr ste rcec am eusteg ne ste (aS ls ARNE Moa a A Sesedit Manseyensone PRE TF ogee oo oogenm —conehe bs Ikomod201 —AnideyenSoucePiet’ = 382 Grogan anger pers | inane tagstes snariopen once Pojet 2 epltet7 A MEN tod anroaopnsorcerent 2S Gedetm —— Conjere moe 8) Pronto!!! © HelloWorld esta criado. Agora, basta rodar sua aplicacao no simulador de Android. Para isso, va em Run -> Run Configurations... @ crie uma nova configuragao para Android, nomeando-a @ escolhendo a aplicagao HelloWorld. plugin fard o upload da aplicacdo para o simulador e 0 instalara, rodando sua aplicacao logo em seguida. Capitulo 1 - Android ¢ HelloWorld - Exercicio: HelloWorld- Pagina 8 mom mm oe i Me 1D cactum— htipiimw.caclum.com.br Desenvolvimento mével com Google Android Cina = oo nome 4) O simulador demora um tanto para inicializar, j4 que esta realmente dando boot num Android para o teste. Mas, quando finalmente terminar, vocé deve ver uma tela assim: Soe 16: Muitos arquivos foram gerados automaticamente quando criamos um projeto do Android. Para comegarmos ‘a entender o que acontece na nossa aplicagao, vamos explorar um pouco a estrutura desse projeo. Entendendo 0 que foi gerado Capitulo 1 - Android e HoloWorld - Entondondo 0 que foi gorado - Pagina 8 O caoum—htp:tmn cad come DeseroNmanio mol om Google Antkd Aclasse HelloWord Comece abrindo 0 arquivo Hetiovorld. java (em src, no pacole br.com.caelun.hellovorld), Voc vera algo como: public class HelloWorld extends Activity { coverride Public void onCreate(Bundle savedInatanceState) { super .onCreate (savedInstanceState) ; setContentView(R. layout main) ; Note que essa classe é uma Activity. Isso quer dizer que ela representa uma tela da nossa aplicagao e implementa a forma como essa tela reagira interagdo com 0 usuario e 0 contetide mostrado nela, entre outros. Layouts a moda do Android A forma e disposi¢ao com que os elementos sdo apresentados na tela, contudo, & responsabilidade dos Layouts. Veja 0 arquivo main.xnl em res/layout/: Nesse exemplo, estamos deciarando um layout linear e avisando que, mesmo que nao houver conteiido 0 bastante para preencher a tela, a aplicagao se esticara para ocupar toda a tela. Isso se deve aos parametros ‘com £i11_parent Ja na tag TextView, note que a altura é determinada como o apenas necessario para mostrar seu contetido, configurada como wrap_content. Agora, repare na linha em destaque: @string/hel1o. Ela define o texto que aparecerd na tela quando a apli cago rodar. Perceba que ela é apenas uma chave para algum texto, Esse texto esta definido em res/values, dentro do arquivo string xml Essa 6 uma idéia simples que facilita na internacionalizagao da sua aplicagao. Para traduzi- la para outras linguas, basta criar outros arquivos de value com as tradugées, Capitulo 1 - Android e HoloWorld - Entendendo o que foi grado - Pagina 10 emer oe eee ee OO T) caoum psn cach come Desenvhenlo mével com Google Aro Imagens e afins Frequentemente, precisamos de imagens para complementar nossa aplicagao. Entretanto, quando pensa- ‘mos em dispositivos pequenos, é necessério considerar as capacidades de resolugao da tela. Assim, um projeto Android guarda imagens nas pastas res/dravable-[ImhJdpi/, onde 1dpi corresponde a baixa resolugao, adpi a média e hdpi @ alta resolugao. Capitulo 1 - Android ¢ HelloWorld - Entendendo o que foi gerado - Pagina 11 Um pouco de teoria Agora que ja conhecemos o funcionamento basico de uma aplicagao para Android, 6 preciso criar uma base maior, teremos que ir mais a fundo no SDK. Veja a estrutura do sistema do Android na figura abaixo: 8 oe Libraries Android Runtime As aplicagbes e os frameworks do Android rodam sobre uma maquina virtual diferente, chamada Dalvil que roda um bytecode especifico. No entanto, a linguagem de alto nivel que utilizamos para programar é 0 Java. © que acontece ¢ a SDK do Android ja vem munida de um tradutor do formato bytecode de um class para © formato dex da virtual machine Dalvik, que, além de traduzir, ja faz uma série de otimizagdes focadas em reduzir 0 espago do executavel gerado. Entendamos, agora, os componentes e seus ciclos de vida para que possamos montar um sistema robusto, expansivel e com uma performance aceitavel para o usuario, 12 oe ee oe oe ee oe See ee eee ee Desenvolvimenta mével com Google Android Ja comentamos que uma Activity corresponde usualmente a uma tela da sua aplicagdo, mas, mais do que isso, 0 executavel da sua aplicag4o Android tem que estender a classe Activity. Essa 6 a maneira do framework saber o que chamar no seu executavel. (O método oncreate & chamado quando uma Activity 6 executada e ele faz a chamada no sistema. AAs classes que estendem Activity, de uma forma mais abrangente, interagem tanto com usuarios como com servigos ou intengdes. Ciclo de vida de uma Activity Toda Activity tem o ciclo de vida representado na figura a seguir. Os métodos chamados serdo os métodos ‘que sobrescreveremos quando criarmos nossas préprias Activities. Capitulo 2 - Um pouco de teoria - Activity - Pagina 1 . casum-htp:tmmcaoumconbe DeservoNimeio mil com Google And ‘onDestroy() ‘onCreate() Chamado quando a aplicacao é criada. E onde se criam as Views, faz chamadas de banco de dados. Quando executado, o sistema recebe um Bundle com o estado da tiltima execugao da atividade. onStart() Chamado antes da aplicacao ficar visivel na tela. Se der tudo certo, vai para onResume(), sendo, para onStop() onResume() Chamado apés 0 onseare() se a sua aplcagao fr para primeira plano, Neste ponto, voce est interagindo com o usuario. E aqui que sua aplicagéo pode iniciar ou retornar as agées necessévias para atualizar as interfaces como usuario. ‘onPause() Acontece quando 0 Android chama uma atividade diferente. Vocé perde os direitos da tela, entio é 0 momento de parar animagées e todo o supértluo que consuma recursos do sistema e bateria. ‘onStop() Chamado quando outa atividade obteve o primeiro plano, ou quando sua atividade esta sendo Capitulo 2 - Um pouco de teoria - Activity - Pagina 14 eeeeeeeeeeeeeeeae eee eee 1 caokm— ht caoum comb Deservtento move com Google Anois eliminada. onDestroy() Ulima oportunidade da sua aplicagéio fazer alguma coisa antes de ser eliminada. Lembre-se que este método pode ser chamado quando 0 Android precisa de recursos, ou porque o usuario optou por finalizar a aplicacao. ‘onDestroy()na versao 1.5 Daa Por alguma razo, 0 método onDestrey() nao era chamado na versao 1.5 do SDK Se vocé estiver desenvolvendo para essa versao em particular, tome cuidado com esse detalhe! ae 2.2 - Service Diversas vezes, precisamos executar tarefas mais demoradas, ou mesmo tarefas executadas continua- ‘mente, em background. Para esse fim, existem os Services. Eles sao trechos de cédigo geralmente executados ‘em segundo plano e sem interlace de usuario. Um exemplo classico é um tocador de MP3, que executa uma fila de reprodugao, mesmo que o usuario esteja em outra tela ou aplicagao. Ciclo de vida de um Service O ciclo de vida de um Service é um tanto parecido com o de uma Activity. As diferengas se devem exatamente ao fato de services nao terem representacées visuais: ‘onResume(), onPause() e onStop() nao sao necessirios, jA que Services rodam sempre em segundo plano, nao tendo interface de usuérro e, portanto, eliminando a necessidade destes métodos. ‘onBind() Chamado polo método Context.bindService(). Cria 0 servigo se ele nao existir e chama onCreate(), mas nao 0 onStart(). O método onBind() 6 chamado conforme a intengao do cliente e retorna um Bind, para chamadas futuras. E comum que servigos tenham varios clientes conectados a ele. onDestroy() Chamado quando um servigo esta prestes a ser terminado. Executado quando nao existir mais clientes conectados a ele ou quando o Android precisar de recursos. 2.3 - Intents Ja, outras vezes, gostariamos de integrar nossa aplicagdo com servigos ou mesmo outras aplicagdes ja existentes, criando mashups méveis @ enriquecendo nosso produto sem refazer trabalho. Os elementos essenciais que faciltam a criacao de novas aplicagbes a partir das existentes s4o os Intent. Elas sao usadas para a interacao com outras aplicagdes @ servicos que fornegam informagdes para a sua aplicacdo. 2.4- Receptores de Broadcast Aigumas sinalizagées do sistema sao feitas através de broadcasts internos, que podem ser recebidos pela sua aplicagao. Os receptores de broadcast respondem a solicitagao de servigo de outras aplicacées. Essas solicitacées podem ir desde bateria baixa a avisos de outra aplicacao ou mesmo de SMS recebido. Ele é um trecho de Cédigo que responde a servicos ou atividades. Capitulo 2- Um pouce de teoria~ Service - Pagina 15 cookin ~ htm chin comb Desanvhnelo mol com Google Acid Pensando, agora, no inverso, vooé pode querer que sua aplicacao disponibilize informagdes para outras quaisquer. Para trocar dados entre Activities ou Services, existem os Provedores de Contetido, Eles usam a interface padrao de uma URI para atender as solicitagdes. Por exemplo, quando se solicita ‘dados dos contatos, a URI natural seria content: //contacts/poopl ‘Se houver mais de uma URI associada, nao ha problema. O sistema pergunta ao usuario qual ele desoja Aplicagées visuais que podem ser adicionadas no menu principal, utlizando aqueles icones animados com 0 quais j4 estamos acostumados. Uma variagao de receptores de broadcast, 0s Widgets sao aplicagdes dindmicas e interativas para caracte- rizar sua aplicagao e trazer feedback para o usuario direto do menu principal do Android. Na barra superior do Android, vocé pode receber notificagdes do sistema sobre eventos acontecendo em. outras telas ou aplicagdes sem perder o foco da Activity atual. Envia-se @ recebe-se esses avisos através do Wovifications. Um exemplo delas € quando vocé recebe um SMS. Quando isso acontece, 0 dispositivo te avisa piscando a tela, fazendo barulho ou mostrando icones ou mensagens. No final do He1oWor14, vimos algumas pastas internas & /res, como layout, values e dravable, e, além delas, ha algumas outras aparecem em aplicagdes mais complexas e ricas. Vamos, agora, mais a fundo nesses importante arquivos: resilayout/ Esse 6 0 local para armazenar suas telas, escritas em XML. Veja, por exemplo, o arquivo main.xm1 em HelloWorld/res/layéut/, Nesse exemplo, estamos declarando um layout linear e avisando que, mesmo que néo houver contetido 0 bastante para preencher a tela, a aplicagao se esticaré para ocupar toda a tela. Isso se deve aos parametros. com fi11_parent. Ja na tag TexeView, note que a altura é determinada como o apenas necessario para mostrar seu contetido, configurada como wrap_content. resivalues/ Repare na linha em destaque no layout acima: ostring/hello. Ela define o texto que aparecerd na tela quando a aplicacao rodar. Perceba que ela ¢ apenas uma chave para algum texto. Esse texto esta definido em res/values, dentro do arquivo string. xnl. Hello World! Curso rutt-8"2> app_nams Essa é uma idéia simples que facilita na internacionalizagao da sua aplicagao, Para traduzi-la para outras linguas, basta criar outros arquivos de value com as tradugdes. Além disso, isolar as Strings do sistema, também potencializa a clareza de alguns pontos do cédigo como por exemplos, chamadas ao banco de dados do Android res/raw/ Esse é 0 local para armazenar arquivos de midia que futuramente serao utilizados no sistema, como mp3, videos ¢ outros. res/XML/ Nessa pasta armazenaremos arquivos XML. Se ela nao existir, 6 s6 crié-la na pasta /res res/drawable Local para armazenar imagens, sejam +.gif, +. jpg OU *.png. Vale relembrar que as imagens da sua aplicacao sao guardadas em trés resolugdes, cada uma com sua pasta no sistema’ * res/dravable- (inh]dpi/: low, dispositivos de baixa resolugao (quase inexistentes); ‘+ res/aravable-[1ah] épi/: medium, dispositivos de média resolugdo (raros); © res/dravable-[1mh]dpi/: high, dispositivos com alta resolugo (maioria). ‘Capitulo 2 - Um pouco de teoria - Os recursos @ a pasta res - Pagina 17 Desemvolvimenta mével com Google Android npsiww.caciurm com br Existe também uma classe central e automaticamente gerada que 6 responsavel pelo mapeamento dos ‘elementos da view com 0 model e 0 controller. Veja que tudo o que é criado ou dectarado na pasta res ganham uma representagao em Java, que utiizaremos bastante para pegar valores e referenciar itens. Note, no entanto, que essa classe nao deve ser alterada a mao. Ela 6 apenas um recurso que o Android disponibiliza para nés. public final class R { public static final class attr { } public static final class dravable { Public static final int caelum=0x7£020000; public static final int icon=0x7£020001; ? public static final class id { public static final int FrameLayout01-0x7£060000;, public static final int public static final int public static final int linearl=0x7£060001; public static final int send=0x7060005; public static final int texto-0x7£060004; > public static final class layout { public static final int hellovorld=0x7£030000; public static final int layout1=0x7£0300015 public static final int main-Ox7f030002; public static final int player=0x7£030003; public static final int snsexample=0x7£030004; public static final int widgets-0x7£030005; ano mm me om om em me mM y public static final class raw { public static final int msica-0x7£040000; public static final int video=0x7#040001; > public static final class string { public static final int app_nane-Ox7#050001; public static final int hello-0x7£050000; Note que, dessa forma, das nossas classes +. java onde precisarmos acessar qualquer recurso deciarado na pasta res/' . Acesso a imagens: ‘+ Rdrawable.icon i * R.drawable.caelum Acesso a itens da tela: * Riid.botao Riid.texto Capitulo 2 - Um poueo de teora ~ Rjava- Pagina 18 bE eee ee cost tts cache contr Desenvhienlo mv com Google Aid Acesso a arquiv © Rurawmusica * Rrawvideo Acesso a strings: ‘© Ristring.app_name * Rsstring.hello (© cere da sua aplicacdo, contend as configuragées dela e o registro das activities 6 0 arquivo AndroidManifest.xal. "dstring/app_nane" android:nane="LayoutActivity"> Ele ja ver com um editor extremamente pratico no préprio plugin que torna desnecessario sequer olhar para este XML, embora muitos desenvolvedores pretiram edité-lo & mao. Também é nele que registram-se Activities, receptores de broadcast, etc. E, por fim, também é nele que sao feitas as permissées e liberagdes do seu sistema. Permissées © Android controla o que as aplicagbes podem acessar através de permissées. Seguem alguns exemplos: Pormite usar provedores de localizagao; ‘* Permite acessar comandos adicionais de localizagao; ¢ Permite a criagao de provedores de localizagao simulados; Capitulo 2- Um poueo de teoria - AndroidManiest xml sou editor - Pagina 19 1D Cactum - hitp:www.caclum.com.br Desenvolvimento mével com Google Android permission android:naze="android.permission. INTERNET"/> Permite acesso a internet; Permite fazer chamadas telefénicas; aa Foye A bot feteah 5 lve rjc. ose Ue Projects sign Woking St Debug As % vas 3 NewTat oa Compare Wah , pont Signed Appin Package ester rom Local Hit. Me ; Andi Tels . Fao repens | | | | | | ‘ { i i ‘ i i is {tnt : i i { Confirme o nome do projeto e clique em Next Aaa ep Escolha a sua chave e coloque a senha, que no nosso caso 6 “caelum” ou crie a chave na hora! Capitulo 3 - Deploy - Assinando sua apkcacto - Pagina 23, caoken-nipsvimcacmcon.be Se vocé criou uma nova |= ye | carci oy cate 0 @ irae sien a yr ncson gre # Cetennteyton tecaen BiCe Cab ero ‘hor ole (aa Desenvolvimento mével cam Google Android ==) chave, vocé deve preencher os campos para identiicagao [Siemon a Meranontierints SEP Finalmente escolha 0 destino do seu .apk, verifique a informagao de validade do certificado, ¢ clique em finish ‘Capitulo 3 - Deploy - Assinando sua apicagao - Pagina 24 = a wee ee eee eee eae ee eae am tal D1 cactum — htp:/iwww.caclum com.br [Colocando um icone na sua aplicaao} Desenvolvimento mével com Google Android Para colocar um icone no seu aplicativo, vocé tera que colocd-lo na pasta drawable da aplicaco e importé-la no seu AndroidManitest.xmi, Na tag Application deve ser colocada a informacao do local do logo: ett errs a g Cr al ae ee _| a ri io Bee. 3 Capitulo 3- Deploy - Assinando sua aplicagdo - Pagina 25 coum ht cao com Desanvtmnto ma com Google Anoit 3.4- Android Market Distribua as suas aplicagdes no Android Market, Id esto varios desenvolvedores varios softwares dos mais variados tipos, gratuitos e pagos. Valor de $25 no cadastro, por volta de R$47,50 na edigdo desta apostila, http://www.android.com/market, Para instalar um .apk no Android, ele precisa estar assinado digitalmente. Em alguns casos 0 envio da aplicacao pelo bluetooth é travado pela operadora, a maneira mais pratica portanto é pelo cabo usb, copiando diretamente no cartao de meméria ou, logicamente, o download. andDRolDd Capitulo 3 - Deploy - Android Market - Pagina 26 whee eee Mais componentes de tela Como voo8 j4 sabe, todas as telas do Android sao feitas num arquivo XML. Agora iremos ver alguns desses. ‘componentes, ou widgets, como sao chamados: 4.1 - TextView Serve para escrevermos um texto na tela do Android. Para ler 0 campo editado, deve-se chavar getText() e depois toString) EaitText ednuat = Log.i(*Meu Texto: " , ednumt .getText() -toString()) ; EditText) {indViewByTd(R.campo.campot) ; 27 1. Cactum — hntpsiwww.caclum.com.br Desenvolvimento mével com Google Android 4.3 - Button Este widget é um botao como na web ou em sistemas desktop. button android: id~"@rbotao/botaol" android: 1ayout_width="fill_parent’ android: layout _heigh Bote jrap_conten android: text > Para usarmos na l6gica, devemos nos referenciar da seguinte maneira’ Button botaot = (Button) findViewById(R.botao.botaot); botaol.eetOnClickListoner(new View-OnClickListener(){ public void onClick(View view) { 7/ Raga alguna coisa com 0 botao pressionado + » 44- ImageButton Com este widget podemos criar botées mais personalizados, utilizando imagens. aPercentual; Spinner spnsal aPercentual jew ArrayAdapter (this, android.R. Layout. simple. percentual) ; spnsal = (Spinner) findViewByla(R.spinner..opco sspnsal .setAdapter (aPercentual) Ds Ant opcaoSelecionada = spnsal .getSelectedItenPosition() Capitulo 4 - Mais componentes ue tela Pagina 29 ©, Cactum — hitp:iwww.caelum.com.br Desenvolvimento mével com Google Android 4.6 - ListView Uma lista capaz de capturar eventos de clique na tela. android: layout _height="fi11_parent String(] contatos = new String[] {"Paulo","Guilherms gio", "ico", "Ettore"}; _item1, contatos) View arg, View argi, int arg2, long arg3) ¢ © item selecionado Capitulo 4 - Mais componentes de tela - ListView - Pagina 30 z-memwememm -—mememmememmmememeee © cactum — htp:/mww.caclum.com.or Desenvolvimento mével com Google Android cei ants Sergio NTT 4.7 - RadioGroup e RadioButton Seletores de opgao tinica. (RadioGroup) findViexBy14(R.opeao. opcoes) Capitulo 4 - Mais componentes fe tela RadioGroup © RadioButton - Pagina 31 1) Caetum — htip:iiwwew.caehum.com.br Desenvolvimento mével com Google Android Ant op = rg.getCheckedRadioBut if (op=-R.radio.opcaot) { // Faga alguna coisa para a opcio 1 } else { // Faga outra coisa para a opie 2 onTd() 5 > 4.8 - CheckBox Seletores de opcao exclusiva. ImageView imagem = (ImageView) £indVieuByTd(R.id. imagem); imagem. set ImageResource(R.dravable. foto2) ; Fal @ 12:24pm 4.10 - Gallery Uma maneira mais agradavel de listar varias imagens numa pasta. Gallery android:id="@rid/gallery" android: layout_width="fill_parent’ android: 1ayout_height="vrap.content' android:gravity="botton" P Precisa criar um Adapter que estende BaseAdapter, como no exemplo: final Context ctx = this ; (Gallery) findViewByld(R. id.gallery)) .setAdapter (new BaseAdapter ({ private int(] imagens = {R.dravable.caclun, R.dravable. icon, R.dravable.caelum, R.dravable. icon }; Override public int getCount() { return this. imagens. length; 7 eOverride public Object getItea(int position) { return position ; } Capitulo 4 Mais componentes de tela - Gallery - Pagina 33, © Cactum — hitp:iwww.cacium.com.be Desenvolvimento mével com Google Android eOverride public long getTtenTd(int position) { return positior > Override Public View gotView(int position, View convertView, ViewGroup parent) { ImageView i = new InageView(ctx); i setInagoResource (this. imagens {position]); i -setScaleType (InageView.ScaleType.FIT_XY); i-setLayoutParams (new Gallery .LayoutParans(150, 150); »; emmmm mm om oe om ia Capitulo 4 - Mais componentes de tela - Gallery - Pagina 34 woe ope eee Desenvolvimento mével com Google Android Existem muitas outras view com muitas funcionalidades, segue uma “pequena’ lista: = AnalogClock + ProgressBar * SurlaceView '* VideoView ‘+ Chronometer + MapView GridView TabWidget DatePicker TimePicker + WebView Pesquise na internet, no site de desenvolvedores do Google e saiba mais destas outras Views Pequenos avisos podem ser mostrador atravéz da classe Toast (Torradeira), que faz exatamente 0 que 0 ‘nome diz Ele faz “brotar* um aviso na tela por um certo tempo. Segue 0 cédigo ‘A duracao pode ser Toast LENGTH LONG = 1 ¢ ToastLENGTH_SHORT = 0. Se quiser mais tempo, a solugao 6 chamar varios Toast's iguais. Toast.makeText (context, "Meu texto de aviso", Toast.LENGTH_LONG).show() ; Se quiser um alerta que precise de uma confirmagao do usuatio, utlize um AlertDialog. AlertDialog.Builder builder = new AlertDialog.Builder(Aplicacao. this); builder. settessage(mensagem) ; builder.setioutralButton("0K", null); MertDialog dialog = builder.create(); dialog. setTitle(titulo) ; dialog.show(); Capitulo 4 - Mais componentes de Toast - Pagina 35, 1 Cactum — hitp:iwww.caelum.com br Desenvolvimento mével com Google Android (o) Curso de Android erties dicen 4.13 - Atributos XML android:id: Especitica a identificacéio no programa android:layout_width: Especifica a largura android:layout_height: Especifica a altura android:text: Essa propriedade serve para mostrar o texto que é passado como parametro. android:textColor: Essa propriedade serve para definir uma cor para 0 texo exibido. android:background: Essa propriedade serve para definir uma cor de fundo. android:phoneNumber: Essa propriedade serve para definir uma entrada de valores no formato de ‘nuimero telef6nico. O valor padrao desse atributo é “falso” android:numeric: Com essa propriedade habilitada, o widget com essa propriedade $6 ira aceitar niime: ros (inteiros e decimais). O valor padrdo desse atributo ¢ “falso” android:textStyle: Essa propriedade serve para definir um estilo a fonte (negro e/ou italico). android:textSize: Essa propriedade serve para definir 0 tamanho da fonte. O tamanho da fonte pode ser especiticado em varias notagées : px (pixels), sp(scaled-pixels) , mm(milimetros), in (inches) e ete. android:typeface: Essa propriedade serve para definir uma fonte ao texto (Arial , Times NewRoman, Courier New e ete), Capitulo 4 Mais componentes de tela- Atibutos XML - Pagina 36 mpmmimmom mm Mm imme mm ™m @ 1D Cactum— htipsiwww.caclum com.br Desenvolvimento mével com Google Android ‘+ android:capitalize: Essa propriedade serve para definir o tipo capitalizagao das palavras. Por padrao, 0 valor e “none*(nenhum). androld:password: Com essa propriedade voce habilta a digitagao de senhas. @+/ Quando ve identifica o id de um widget, ele 6 compilado e aparece na classe R.java. Por exemplo, 80 0 id for “@+id/nome", na identiticagao da sua légica, apareceria R.id.nome. Capitulo 4 Mais componentes de tola~ Atributos XML - Pagina 37, Layouts 5.1 - LinearLayout mmmoemm mm Este layout é utilizado para alinhar horizontalmente ou verticalmente o contetido da tela do Android. i” android: Layout_heigh: = m im m@m m™ m™ Botdo1 ff Botdo2 ff Botd03 ™ a 5 & Figura 5.1: horizonhal 38 iuonknunieaeeeeeeaaa 1D. cookin — ips caotsm com. Desemohimento méve com Googe Andiad Botao1 Botao2 Figura 5.2: vertical 5.2 - TableLayout Utlizado para dividir a tela em células. thomas. android. com/apk/res/android" £411 parent 411_parent! Capitulo 5 - Layouts - TableLayout - Pagina 39 1. Cactum — hnip:iwww.cactum.com.br Desenvolvimento mével com Google Android 5.3 - AbsoluteLayout Utilizado para definir exatamente as posigdes na tela. Deve-se ter uma nogao inicial do tamanho maximo da tela. Android XML File, nomeando-o Lista.om. Dentro deste XML, preencha com as linhas destacadas no cédigo abaixo: ‘encoding 3) Para que nosso ListaAunos..java conhega 0 1ista. xal, precisamos referencia-lo com alterando 0 parame tro da instrucao setcontentView(....) Capitulo 6 - Cadastro de alunos - 0 projeto CadastroCaelum - Pagina 43 D cactum — hp:swwu.cacium com br Desenvolvimento mével com Google Android public class Listaklunos extends Activity { coverride public void onCreate(Bundle savedInetancestate) { super .onCreate(savedInstancestate) ; setContentView(R.layout.lista) ; Contudo, se rodarmos este cédigo, nao veremos nada, pois a lista esta vazia Ory aM © 12:16am bls aide ell: ail oot foulwales|aalralwelue|i lool pt relsslodedeulchelules] seal all onl wal velcaal aut rey ae 1c 4) Para mostrar uma lista preenchida, precisaremos de um ListAdapter. Ele é a representagao vertical de uma lista ja preparada para ser colocada em uma tela de Android. Por enquanto, apenas para vermos alunos na tela, adicionaremos uma lista estatica com nomes de alunos A implementacdo de ListAdapter que vamos utlizar, 0 ArrayAdapter. E, para agregar esse item a tela da aplicacao, precisamos pegar 0 objeto Listview, que sabe colocar uma lista na tela, Esse objeto ja esta pronto e disponivel. Basta pegé-lo usando a seguinte instrugao: (ListView) findVievById(R.id.1ietaslunos) Note que, de dentro do Java, fomos capazes de encontrar um objeto da visualizagao pelo id dele. A maneira como fazemos esse link 6, no XML, através da tag @+id/listaAlunos. A nomenclatura ¢ @+divisao/nome e dove ser seguida nos seus projetos futuros. Modifique o cédigo da classe ListaAlunos. java para ficar como segue: public class Listadlunos extends Activity { coverride Capitulo 6 - Cadastro de alunos - © projeto CadastroCaelum - Pagina 44 mmm oe eles =m m@ mm mm wow 1D. Caclum - hitp:iivww.caelum.com.be Desenvolvimento mével com Google Android public void onCreate(Bundle savedInstancestate) { super .onCreate (savedInstanceState) setContentView(R. layout lista); List alunos = Arrays.asList("Anderson", "Filipe", "Guilherme"); ArrayAdapter adapter = nev ArrayAdapter(ListaAlunos.this, a, nés teremos a seguinte tela no simulador: ci ENT rN PNT 6.2 - Toast Para avisarmos os nossos usuarios, 0 Android nos dé uma classe bastante pratica, que € 0 Toast. Ele permite mostrar uma informacao por um periodo curto ou longo de tempo na tela. Quando um Toast 6 eriado, uma mensagem fica pronta para ser mostrada na tela, na forma de um balaozi- iho de texto informativo, Ele s6 6 mostrado, contudo, quando chamamos 0 método show() Podemos integrd-lo nossa aplicacao para que, quando o usuério clicar no aluno listado, mostremos a posi¢&o daquele aluno na lista 6.3 - Exercicio: integrando 0 Toast 1) Vamos preparar nossa lista para que seus itens se tornem clicdveis, adicionando algumas linhas ao onCreate() da classe ListaAlunos. java. S6 que, como todo botdo, ¢ preciso programar qual ago acontece quando clicamos num item da lista. Para descobrir quando 0 usuario clica num botdo, 0 Android usa 0 conceito de Listeners e, em particular, para “escutar”o clique sobre um item da lista, o que 6 usado ¢ um Ont tenClickListener, 0 tinico porém que esse Listener é uma interface que precisa ser implementada - tradicionalmente, em Java, faremos essa implementacao com uma classe anénima. Capitulo 6 - Gadastro de alunos - Toast - Pagina 45 cao -tapshvm cao come Dasonvbientomével com Google Anois Altere 0 onCreate() da classe ListaAlunos. java’ Public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstancestate) ; setContentView(R. layout. lista) ; List alunos = Arrays.asList ("Anderson", “Filipe", "Guilherne ArrayAdapter adapter = nev ArrayAdapter (this, android.R.layout.simple_list_itea1, alunos); ListView listaAlunos = (ListView) findVievById(R.id.1istaslunos) ; Listadlunos.setAdapter (adapter) ; Listadlunos.setClickable(true); Listadlunos. setOnItenClickListener (new OnItenClickListener() { Override Public void onltenClick(AdapterView adapter, View view, int posicao, long id) { // ainda colocarenos aqui o que acontece quando clicanos Ds Mas, se rodarmos a aplicagao agora, tudo ainda continua funcionando exatamente como antes. 2) © que faltou foi implementar 0 método do tal OnttenClickListener para que ele reagisse de alguma forma especitica. Faremos, agora, com que, sempre que alguém clicar sobre um aluno, um Toast de longa duragao apareca, mostrando a posicao do item na lista Basta implementar 0 método ontteaClick(), trocando 0 comentario pela chamada ao Toast. (Note que 0 nome dos parémetros nao ¢ 0 padrao do auto-complete) override Public void onItenClick(AdapterView adapter, View view, int posicao, long id) { Toast .makeText (Listaklunos. this, "Posigdo selecionada:" + posicao, Toast.LENGTH_LONG).show() ; Agora, toda a vez que clicarmos num item da tela, 0 Android ecoara com 0 Toast a posicao selecionada. Teste no simulador! Capitulo 6 - Cadastro de alunos - Exercicio:intogrando o Toast - Pagina 46 CCaelum —htp:/www.cactum com.br Desenvolvimento mével com Google Android PTH) Ete EIT Tee} ores eta 6.4 - Menus A\é agora, sabemos fazer aplicagdes de uma tela apenas, mas na maioria das vezes, precisamos de diversas telas numa mesma aplicago e de menus de acesso a fungdes especiticas, Folizmente, toda Activity do Android ja vem preparada para lidar com menus. Para crié-lo, basta sobres. Crever 0 método onCreateOptionsMenu também da classe ListaAlunos. java, que 6 uma Activity Quando criamos um item no menu de uma aplicagdo, quem se encarrega de encaixé-lo na posi¢ao correta da tela 6 0 proprio sistema, vocé nao precisa se preocupar. Para isso, dentro daquele método, fariamos: MenuTtem novoAluno ~ menu.add(*ovo Aluno") Como comportamento padrao, o sistema colocaré como nome do botio, 0 parémetro passado no método ‘add, mas, se preterit, pode-se trocar por um icone. Basta chamar no item de menu recém-criado o método set Icon, passando um R.dravable.nomeDalmagem Exercicio: comecando um menu 1) Vamos agora criar um menu para que seja possivel a navegacdo pelas diversas telas e funcionalidades. O primeiro de todos sera um item para adicionar um novo aluno, Capitulo 6 - Cadasto de alunos - Menus 1 cactum — hitp:iwww.caclum.com.br Desenvolvimento mével com Google Android public boolean onCreateOptionsMenu(Menu menu) { Menultem novokluno = menu.add(0, 0, 0, Muno") 5 novoAluno.setIcon(R.dravable.novo) return true ; Voce deve retornar true para que o menu seja visivel. Agora, ja 6 possivel ver 0 icone no menu, mas ele ainda nao faz nada. 2) Para tratar o clique no item do menu, teremos que sobrescrever um outro método, o onOptionsItemSelected(). Nele, por ora, apenas langaremos um Toast para indicar que realmente interceptamos a chamada pra esse item do menu, eoverride public boolean onOptionsTtenSelected(Menultem item) { it ( item.gotItemtd() == 0) { Toast .makeText (ListaAlunos. thi ce clicou no novoAluno", ‘Toast-LENGTH_LONG) .show() ; Vocé deve retornar true para que ele termine 0 processamento da selecao. Repare que ole compara a posigao clicada no menu e mostra um Toast como na imagem abaixo: mee om mom om mm om om om mm mn oom a 3) Para completarmos este exemplo, implementa rios estdo também acostumados, o LongClick femos também outra funcionalidade do Android, que os usud Capitulo 6 - Cadasiro de alunos ~ Menus - Pagina 48 uuu nnn uwwe ewe eee eee ae 1D cooum—nipsnvn cach come ‘Vamos adicionar 4 nossa lista mais um listener via classe anonima: Listadlunos.setLongClickable(true) ListaAlunos.setOnTteaLongClickListener (new OnIteaLongClickListener() { COverride public boolean onftemLongClick(AdapterView adapter, View view, int position, long id) { return false; , ys Vocé deve retornar false para que ele consuma o longclick. Outra prética bastante usada é o menu de contexto. Ele nos da conforto ao tratar um item especitico. Para usé-lo teremos que registrd-lo, chramar 0 seu método de apresentago e finalmente, chamar 0 seu método de tratamento: public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menulnfo) { super.onCreateContextMenu(nenu, v, menulnfo); > override Public boolean onContextItenSelected(Menultem iten) { return super.onContextTtenSelected (tem) ; > @ para registrar, devemos chamar 0 método a seguir dentro de onItesLongClick: registerForContextMenu(listaAlunos) ; 6.5-Chamando Activitys Nem s6 de Toast's viverd a nossa aplicacao: precisamos chamar outras Activty’s para tratar outras telas do nosso sistema. Dessa forma, sera possivel navegar pelas telas da nossa aplicagao, processo 6 simples: criaremos uma outra Activity, que controlara as ages da tela, e um novo Android XML para montar a viasualizacao da tela. Em seguida, bastard fazer com que 0 clique no menu "Novo Aluno” chame o método startActivity(...), pasando para ele um Intent: uma intencao de ir para outra Activity. O Intent, por sua vez, precisara receber © objeto de contexto atval (usualmente 0 this) ¢ a classe que controla a tela para onde queremos i starthctivity(new Intent (ContextoAtual.this, Novakctivity.class)); Exercicio: adicionando novo aluno 1) Comecemos criando a tela propriamente dita, em um novo Android XML que chamaremos de formulario,xal. Capitulo 6 - Cadastro de alunos - Chamando Actviy’s - Pagina 49, 1 caoum—ntpsrmn.cadum com Desenvolvimento mével com Google Android New Android XML File Creates anew Ando XML he Project {CadastrCaetum Fle [fomulaio.mid What type of resource would you ike to crete? 2 (ayaa Valves Menu Arptidge Provider 2) Entao, preencha o arquivo criado (om res/1ayout/formulario.xal) com os labels, os campos de entrada de dado e 0 botao de insercdo. Nele, havera textos estaticos, campos de edicao de texto e um botao: 10+ id/TextView5" ‘android : layout texattribyeight="wrap content” android : layout Fill_parent® ‘android : text="Nota :*/>

You might also like