Cur So Android

download Cur So Android

of 76

Transcript of Cur So Android

  • 7/26/2019 Cur So Android

    1/76

    Apostila Bsica

  • 7/26/2019 Cur So Android

    2/76

    Apostila Android - Programando passo a passo

    2

    Apresentao

    Android uma plataforma aberta voltada a dispositivos mveis desenvolvida pela Google.

    Android a plataforma mvel mais popular do mundo, rodando em milhes de telefones,tablets, GPS e outros dispositivos, ela traz o poder do Google e da web.

    Este material tem por objetivo apresentar a plataforma de desenvolvimento Android SDK,juntamente com o IDE de desenvolvimento Eclipse For Java Developers.

    Os conhecimentos adquiridos com esse material sero suficientes para que o estudantedesenvolva suas prprias aplicaes e as disponibilize para download no Google Play.

    Por: Allan Cassiano Weber

    [email protected]

  • 7/26/2019 Cur So Android

    3/76

    Apostila Android - Programando passo a passo

    3

    Sumrio

    Apostila Bsica .................................................................................................................. 1

    Apresentao ........................................................................................................................... 2

    Introduo ............................................................................................................................... 5

    Plataforma Android .................................................................................................................. 9

    Preparao do ambiente de desenvolvimento ............................................................ ................................. 9

    Java Virtual Machine - Java JDK ...................................................................... .......................................... 9

    clipse !D .............................................................................................................................................. "#

    $ndroid $D% ........................................................................................................................................... "#

    !nstalao do $ndroid &DK ..................................................................................................................... "'

    (on)i*urar o clipse para usar o $ndroid &DK ......................................................... ............................... "+

    (riando um emulador para rodar os aplicativos .................................................................................... ",

    (riando proetos $ndroid no clipse ........................................................................................................... 2"

    (riando aplicaes $ndroid ......................................................................................................................... 2/

    Primeiro proeto .......................................................................................................................................... 2/

    Primeira classe ........................................................................................................................................ 2/

    Primeiro la0out ....................................................................................................................................... 2'

    &trin* 1esources ..................................................................................................................................... 2+

    $ndroid Mani)est .................................................................................................................................... 2

    ecutando a aplicao .......................................................................................................................... 2

    erc4cios. ............................................................................................................................................... 3#

    $r5uitetura $ndroid .................................................................................................................................... 3"

    $pplications ............................................................................................................................................ 3"

    $pplication 6rame7or8 .......................................................................................................................... 3"

    ibraries .................................................................................................................................................. 32

    $ndroid 1untime .................................................................................................................................... 32

    inu Kernel ............................................................................................................................................ 33

    Criar uma aplicao simples.................................................................................................... 34

    :sando 7id*ets b;sicos .............................................................................................................................. 3'

    %etVie7 ................................................................................................................................................. 3+

    dit%et ................................................................................................................................................... 3,

    1adio

  • 7/26/2019 Cur So Android

    4/76

    Apostila Android - Programando passo a passo

    /

    Manipulando o la0out com uma classe .................................................................. ..................................... 3,

    1e)erenciando obetos do la0out ........................................................................................................... 3

    vent isteners ....................................................................................................................................... /#

    vent isteners para mais de um 7id*et ................................................................................................ /"

    1eceber e enviar dados para tela ..................................................................... ...................................... /3

    (>di*o da aplicao ................................................................................................................................ //

    erc4cios ..................................................................................................................................................... /+

    Estrutura de um projeto Android ............................................................................................ 47

    Projeto de aenda de contatos ............................................................................................... 49

    $dicionar novos la0outs .............................................................................................................................. '#

    &crollVie7 ............................................................................................................................................... '/

    !ma*eVie7 .............................................................................................................................................. '/

    !ma*e=utton ........................................................................................................................................... '/

    :sando !ma*ens .......................................................................................................................................... '/

    (riar uma nova $ctivit0 ............................................................................................................................... ''

    !niciando outra $ctivit0 ............................................................................................................................... '

    (riar um classe de modelo de dados........................................................................................................... '9

    1etornar dados para outra $ctivit0 ................................................................... .......................................... +#

    1eceber dados de outra $ctivit0 ................................................................................................................. +"

    ibir mensa*ens ......................................................................................................................................... +3

    &elecionar itens na istVie7 ........................................................................................................................ +3

    1eceber dados em uma $ctivit0 .................................................................................................................. +/

    :tili?ando &@ite ......................................................................................................................................... +'

    (lasse de acesso a dados ........................................................................................................................ ++

    MAtodo !nsert ......................................................................................................................................... +,

    MAtodo :pdate ...................................................................................................................................... +

    MAtodo Delete ....................................................................................................................................... +

    (onsultar Dados ..................................................................................................................................... +

    !mplementado o acesso a dados ............................................................................................................ ,#(ontetMenu .......................................................................................................................................... ,"

    ibir um alerta de sim ou no ............................................................................................................... ,2

    :tili?ar a cBmera do dispositivo. .................................................................... ............................................. ,2

    Concluso .............................................................................................................................. 7!

  • 7/26/2019 Cur So Android

    5/76

    Apostila Android - Programando passo a passo

    '

    Introduo

    Android um sistema operacional mvel que roda sobre um ncleo Linux.

    Foi inicialmente desenvolvido pela Google e atualmente mantido pela Open HandsetAlliance (OHA)1, mas a Google responsvel pela gerncia de produto e engenharia de processos.

    O Android permite que as aplicaes sejam desenvolvidas em Java, controlando o dispositivoatravs de bibliotecas desenvolvidas pela Google. Em maio de 2012 o Google play possua mais de500 mil aplicaes e 15 bilhes de downloads.

    Em julho de 2005 a Google adquiriu uma empresa chamada Android Inc, de Palo Alto,Califrnia, essa empresa estava desenvolvendo uma plataforma para telefones mveis baseada emLinux com o objetivo de ser uma plataforma flexvel, aberta e de fcil migrao para os fabricantes.

    Em dezembro de 2006 surgiram os primeiros rumores da Google estar entrando para omercado de telefones mveis.

    O primeiro telefone comercialmente disponvel a rodar o Android foi o HTC Dream, lanadoem 22 de Outubro de 2008.

    Figura 1 - HTC Dream: primeiro telefone comercial com Android

    As diferentes verses do android tem desde a verso 1.5, nomes de sobremesas ou bolos:

    1Aliana formada por diversas empresas como: Google, HTC, DELL, Intel, Motorola, Samsung, LG, T-Mobile,Nvidia e etc, ao todo so dezenas de grandes empresas.

  • 7/26/2019 Cur So Android

    6/76

    Apostila Android - Programando passo a passo

    +

    1.5: Cupcake (Abril de 2009, com a ltima reviso oficial a maio de 2010)

    1.6: Donut (Setembro de 2009, com a ultima reviso oficial a maio de 2010)

    2.1: Eclair (Janeiro de 2010, com a ltima reviso oficial a maio de 2010)

    2.2: FroYo (Frozen Yogourt- Maio de 2010, com a ltima reviso oficial a julho de 2011)

    2.3-2.4: Gingerbread (verso atual lanada a 6 de dezembro de 2010)

    3.0-3.2: Honeycomb (Lanada especialmente para tablets em Janeiro de 2011)

    4.0: Ice Cream Sandwich (Anunciada oficialmente em 19 de outubro de 2011)

    Figura 2 - Estatsticas de utilizao - Dados obtidos dia 03 janeiro de 2012

  • 7/26/2019 Cur So Android

    7/76

    Apostila Android - Programando passo a passo

    ,

    Figura 3 - Verso mais utilizada: 2.3 e 2.4 - Gingerbread

  • 7/26/2019 Cur So Android

    8/76

    Apostila Android - Programando passo a passo

    Figura 4 - Verso atual (quase ultrapassando a Gingerbread em utilizao) : 4.0 Ice Cream Sandwich

    Figura 5 - Melhores dispositivos com android hoje: Galaxy X melhor aparelho custo benefcio e GalaxySIII aparelho Top de linha

  • 7/26/2019 Cur So Android

    9/76

    Apostila Android - Programando passo a passo

    9

    Plataforma Android

    Preparao do ambiente de desenvolvimento

    Esse material utiliza para desenvolvimento a IDE Eclipse na verso Indigo.

    Para montar o ambiente de desenvolvimento, precisaremos dos seguintes softwares:

    Java Virtual Machine - Java JDKVerifique se voc possui o java JKD instalado na mquina, abrindo o prompt de comando e

    digitando:

    java - version

    Se mostrar algo parecido com o texto abaixo, voc possui o JDK instalado

    java version "1.6.0_07"

    Java(TM) SE Runtime Environment (build 1.6.0_07-b06)

    Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)

    Caso contrario, voc deve efetuar o download no link:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u31-download-1501634.html

    Aps a instalao executar os passos:

    V para pasta de instalao do JDK chamada "Java" nos Arquivos de programa.

    Entre no diretrio da verso instalada, entre no diretrio bin.

    Procure pelo arquivo javac.exe e selecione com boto direito e propriedades

    Certifique-se de que o atributo "Local" o diretrio atual, por exemplo: "C:\ProgramFiles\Java\jdk1.6.0_31\bin".

    V nas propriedades de Meu Computador.

    Selecione o item "Configuraes Avanadas do Sistema"

    Clique no boto variveis de ambiente.

    Clique em "Novo" para o contexto de "Variveis de usurio"

  • 7/26/2019 Cur So Android

    10/76

    Apostila Android - Programando passo a passo

    "#

    No campo nome da varivel informe: Path

    Para o campo valor da varivel informe o diretrio do arquivo javac vistoanteriormente, exemplo: C:\Program Files\Java\jdk1.6.0_31\bin

    Clique "OK" em todas as janelas.

    Abra o Prompt de comando do Windows e digite javac, se tudo estiver correto, ele irlistar as opes de parmetros para o JDK

    Eclipse IDEFao p download do IDE do Eclipse caso j no o possua, para esse material, foi utilizado a

    verso Indigo, em uma verso mais leve e apenas com as funcionalidades estritamente necessrias,sendo essa a verso IDE for java developers, o link para download :

    http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/indigor

    Extraia o arquivo zip na raiz do C:, e se preferir crie um atalho para rea de trabalho doaplicativo eclipse.exe.

    Depois de iniciarmos o eclipse, precisamos criar uma workspace, informe a localizao desua preferncia pra a workspace.

    Figura 6 - Criar Workspace

    Android ADTO Android Development Tools (ADT) um plugin para o Eclipse que permite a integrao

    do desenvolvimento na IDE com o SDK do Android, o ADT possibilita a criao rpida de umaprojeto android, a adio de pacotes baseados no framework Android, o debug das aplicao usandoas ferramentas do Android SDK como o emulador de dispositivos, e alm disso a exportao dearquivos .APK assinados ou no, que possibilitam a distribuio da aplicao.

  • 7/26/2019 Cur So Android

    11/76

    Apostila Android - Programando passo a passo

    ""

    O Android ADT pode ser baixado atravs do Eclipse, para isso, abra a IDE e em seguida:

    Para isso selecionamos o menu "Help -> "Install New Software ", abrindo a tela abaixo:

    Figura 7 - Tela para instalar novo software ao Eclipse IDE.

    No campo "Work With" informe o link para o Plugin:

    https://dl-ssl.google.com/android/eclipse

    Clique em "ADD" informe o nome de sua preferncia, como por exemplo "android adt", emseguida clique "OK".

    Aguarde at que o lista seja preenchida.

  • 7/26/2019 Cur So Android

    12/76

    Apostila Android - Programando passo a passo

    "2

    Voc tambm pode pesquisar no Google por "android adt", o que o levar para o sitehttp://developer.android.com/sdk/eclipse-adt.html , onde poder conferir o link do plugin.

    Aps Carregar a tela, expanda o item Developer Tools e selecione todas as opes abaixodele.

    Figura 8 - Android ADT sendo adicionado.

    Clique em next, e next novamente.

    Aceite os trs contratos de Licena e clique em Finish e aguarde a instalao.

  • 7/26/2019 Cur So Android

    13/76

    Apostila Android - Programando passo a passo

    "3

    Figura 9 - Contratos de licena de software.

    Figura 10 - Processo de instalao do Android ADT.

  • 7/26/2019 Cur So Android

    14/76

    Apostila Android - Programando passo a passo

    "/

    Caso aparea a mensagem abaixo, ou algo semelhante, basta clicar em "OK", este apenasum aviso sobre as questes de segurana e validade do software ADT.

    Figura 11 - Mensagem de validade de software.

    Ao trmino da instalao ser necessrio reiniciar o Eclipse.

    Figura 12 - Pedido para reiniciar o Eclipse.

  • 7/26/2019 Cur So Android

    15/76

    Apostila Android - Programando passo a passo

    "'

    Instalao do Android SDKAps o trmino da instalao do Android ADT, vamos ao passo mais importante, a

    instalao e configurao do Android SDK. Para tal, devemos efetuar o download:

    http://developer.android.com/sdk/index.html ,

    E executar a instalao na raiz do C, configurando um diretrio sem espaos em branco nonome ou caracteres especiais.

    A instalao simples, e exceto pela seleo de um diretrio vlido, no sero necessriasoutras configuraes.

    Depois de concluda a instalao podemos executar o SDK Manager e selecionar as versesdo android que desejamos trabalhar para ser instaladas.

    Alm das verses do Android precisamos ainda instalar o pacote "Tools" e os pacotes quedesejarmos no item extras, dentre eles vale citar:

    Google AdMob AdsADK.

    Google USB Driver.

    Quanto as verses do android, vamos instalar :

    Android 4.0.3 (API 15)

    Android 2.3.3 (API 10)

  • 7/26/2019 Cur So Android

    16/76

    Apostila Android - Programando passo a passo

    "+

    Em seguida clicamos em "Install N packages", e precisaremos aceitar os contratos de licenade cada pacote, para isso, basta selecionar a opo "Accep All" e clicar em "Install"

    Configurar o Eclipse para usar o Android SDKAps executar toda instalao de todos os pacotes selecionados, precisamos configurar o

    Eclipse, para que ele utilize esses pacotes.

    Para isso precisamos indica-lo qual a localizao do Android SDK e dos Pacotes.

    Acesse o menu "Window -> Preferences -> Android", informar no item "SDK Location" o

    diretrio da instalao do SDK clicar em "Apply" e em "OK".

    Figura 13 - Configurar diretrio do android SDK

  • 7/26/2019 Cur So Android

    17/76

    Apostila Android - Programando passo a passo

    ",

    Criando um emulador para rodar os aplicativosO prximo e ultimo passo para a criao e configurao do ambiente de desenvolvimento, a

    criao de uma emulador que ir simular o funcionamento de um dispositivo e rodar nossasaplicaes.

    Para isso devemos selecionar o menu " Window -> AVD Manager" , ou ento clicar no conede dispositivo na barra de ferramentas.

    Figura 14 - Menu AVD Manager ou cone AVD Manager

    Figura 15 - Lista de emuladores disponveis.

    Em seguida clicamos em "NEW" e informaremos os dados para criao do nosso emuladorde testes.

  • 7/26/2019 Cur So Android

    18/76

    Apostila Android - Programando passo a passo

    "

    Figura 16 - Configurao do Emulador

    Onde:

    Nome - descrio do emulador, pode ser informado de acordo com a preferncia dodesenvolvedor.

    Target - A verso do Android que iremos criar as aplicaes que sero testadas nesse

    emulador. SD Card - tamanho para o carto de memria do dispositivo emulado.

    Snapshot - indica se o estado dos emuladores sero persistidos de um para o outro, oque no necessrio para ns.

    Skin - basicamente o tamanho da tela do emulador, escolha de acordo com aresoluo e tamanho do monitor que voc esta usando.

    Hardware - novas opes de hardware do dispositivo podem ser adicionadas aqui,porm as j existentes so suficientes para a maioria das aplicaes.

    Em seguida clique em "Create AVD". E temos nosso emulador pronto pra rodar, sendo assim,selecionamos ele na listagem de emuladores e clicamos em "Start".

  • 7/26/2019 Cur So Android

    19/76

    Apostila Android - Programando passo a passo

    "9

    Figura 17 - Lista de emuladores criados

    A tela abaixo ser exibida, caso o desenvolvedor queira customizar ainda mais a exibio doemulador. Clique em "Launch".

    Figura 18 - Customizao da inicializao do emulador

    Se nenhum problema ocorrer a tela do emulador ser parecida com a imagem abaixo:

  • 7/26/2019 Cur So Android

    20/76

    Apostila Android - Programando passo a passo

    2#

    Figura 19 - Tela inicial do emulador

    Podemos manter o emulador permanentemente funcionando enquanto desenvolvemos nossosaplicativos, assim diminumos o tempo de resposta para testes.

  • 7/26/2019 Cur So Android

    21/76

    Apostila Android - Programando passo a passo

    2"

    Criando projetos Android no Eclipse

    Com o Android ADT instalado, fica muito mais fcil a criao de projetos no Eclipse, poisele ter todas as opes e atalhos referentes a projetos do tipo Android. Alm de criar todo a estruturanecessrias.

    Para criarmos projetos no eclipse devemos selecionar o menu "File -> New -> Project"

    Figura 20 - Menu para novos projetos.

    Na tela seguinte conhecida como "Select Wizard", devemos expandir a pasta Android eselecionar o tipo de projeto "Android Project", em seguida clique em "Next".

    Figura 21 - Templates de projetos disponveis.

    Nesta tela seguinte informamos o nome do projeto e onde queremos cria-lo.

  • 7/26/2019 Cur So Android

    22/76

    Apostila Android - Programando passo a passo

    22

    Feita as alteraes necessrias clicamos em "Next".

    Figura 22 - Nomeando e salvando o projeto.

    Na tela seguinte selecionamos o SDK que gostaramos de trabalhar, para nossos exemplos,sempre utilizaremos a verso 2.3.3, em seguida clicamos em "Next"

    Figura 23 - Seleo do SDK para criar a aplicao.

  • 7/26/2019 Cur So Android

    23/76

    Apostila Android - Programando passo a passo

    23

    Na tela seguinte ser configurada mais algumas opes do nosso aplicativo, dentre elas temosduas informaes muito importantes e serem informadas:

    Package name - o nome da estrutura do projeto, no Java todo projeto pertence a umpacote que pode ser usado ou compartilhado para outras aplicaes, no Android no diferente.

    Minimun SDK - aqui definimos qual a verso mnima do Android ser necessria pararodar a aplicao.

    Clique em "Finish".

    Figura 24 - Configuraes da criao do projeto.

  • 7/26/2019 Cur So Android

    24/76

    Apostila Android - Programando passo a passo

    2/

    Criando aplicaes Android

    Primeiro projeto

    Com a aplicao de exemplo MeuPrimeiroAPP criado anteriormente, vamos analisar o que o

    plugin ADT gerou para entendermos como funciona uma aplicao Android.

    Primeira classeDentro do diretrio src esta o pacote da aplicao ao qual chamamos de curso.android, nele

    ficar todas as classes que criarmos, mas no momento temos apenas uma chamadaMeuPrimeiroAppActivity.

    Figura 25 - Classe criada no pacote.

    Analisando o cdigo da classe podemos verificar que:

    Linha 1 - Todas as classes criadas pertencero ao pacote que definimos na criao do projeto.

    Linha 3 e 4 - Sempre que precisamos utilizar as funcionalidades do framework ou de outroprojeto devemos importar o pacote deste.

    Linha 6 - Diferentemente das aplicaes comuns de Java, toda classe para aplicao Androiddeve ser derivada da classe Activity (Atividade) e possui como mtodo principal, o mtodo

  • 7/26/2019 Cur So Android

    25/76

    Apostila Android - Programando passo a passo

    2'

    onCreate. Dentro desse mtodo (linha 10) ele invoca o mtodo onCreate da super classepassando o mesmo parmetro (savedInstanceState).

    Linha 11 O mtodo setContentView responsvel por exibir a tela da minha aplicao ,baseado nos layouts xml. Por padro ele chama o arquivo main.xml. mas poderamos criaroutros layouts e chamarmos o nome dele aqui neste trecho de cdigo.

    Primeiro layoutDentro do diretrio res existe o diretrio layout, nele ficaro todas as nossas telas.

    Figura 26 - Preview Screen.

    Essa verso do ADT (e algumas anteriores) possui a funcionalidade de preview do layoutantes mesmo dele ser executado no emulador, assim como a possibilidade de criar telas utilizando odrag-and-drop dos controles que esto na guia Palette e adiciona-los ao layout da tela.

    Mas o mais comum e mais performtico modo de desenvolvimento atravs da edio diretado xml, para isso, basta clicar na guia main.xml marcado em vermelho na imagem.

    Na primeira linha temos a indicao padro de um arquivo xml com a verso doencoder.

  • 7/26/2019 Cur So Android

    26/76

    Apostila Android - Programando passo a passo

    2+

    A seguir temos o tipo de layout da tela, no tipo LinearLayout, os controles ficamdispostos em uma nica linha ou coluna, dependendo da orientao definida, nestecaso a orientao esta definida como vertical, o que pode ser verificado na linha 6 docdigo, desta forma os controles ficaro um abaixo do outro e podem ter sua posio edisposio na tela alterados conforme suas prprias propriedades.

    A partir da linha 9 temos a configurao de um controle do tipo TextView, que exibetexto, ele possui duas propriedades de posicionamento definidas, so elas:layout_width e layout_height nas linhas 10 e 11. O valor fill_parent (oumatch_parent) indica que o controle poder ser to grande quanto o tamanho do seucontrole pai , ou seu container, neste caso o controle LinearLayout. J o valorwrap_content indica que o controle ter o tamanho proporcional ao seu contedo, issofica mais claro no decorrer do desenvolvimento enquanto estamos manipulando olayout para criamos nossas telas.

    A ltima propriedade do controle TextView a text, a qual ir exibir algum valor natela, note que ela faz uso de um valor @string, isso indica que ela esta buscando seu

    valor de outro arquivo xml, e o texto /hello indica qual valor esta sendo requisitadodeste outro xml.

    String ResourcesAinda no diretrio res, existe o diretrio values, esse diretrio tem a funo de guardar

    arquivos de strings e styles.

    Como boa prtica no desenvolvimento, nenhuma descrio ou valor de campo texto deve serdefinida diretamente no arquivo .xml do layout, essa uma sugesto para fins de aplicativosmultilngue e com muitos plurais. Ao invs disso, os textos so definidos dentro de um arquivostring.xml dentro do diretrio values

    Figura 27 - Arquivo de String Resources.

    Note que o valor do TextView da nossa tela chamado hello j esta definido no arquivo.

  • 7/26/2019 Cur So Android

    27/76

    Apostila Android - Programando passo a passo

    2,

    Figura 28 - Resources existentes.

    Onde:

    Name a chave que ser utilizada para busca, no caso do TextView foi informadoandroid:text="@string/hello".

    Value o texto que desejamos exibir, no caso do TextView ele apresenta esse valorna tela.

    Figura 29 - Ttulo da aplicao e valor do TextView.

    A outra string que temos definida no arquivo o nome da nossa aplicao, que esta definidacom a chave app_name, esse valor e usado em outro arquivo visto na prxima seo.

    Figura 30 - String do nome da aplicao.

  • 7/26/2019 Cur So Android

    28/76

    Apostila Android - Programando passo a passo

    2

    Android ManifestUm dos arquivos mais importantes da aplicao o manifesto, nele esto definidas todas as

    funcionalidades da aplicao, permisses, verses e etc.

    Da mesma forma que outras telas, ele tambm pode ser editado no formato .xml.

    Linha 7 Indica a verso do SDK android mnima para rodar a aplicao.

    Linha 10 O cone que sero exibido na lista de aplicaes do dispositivo. O@drawable indica que o cone esta no diretrio drawable dentro do diretrio src, e oic_launcher o nome do arquivo.

    Linha 11 Ttulo da aplicao, aqui esta a string citada anteriormente definida noarquivo de resources String.xml, esse valor ser exibido na lista de aplicao como onome desta, junto com o cone.

    Linha 13 Toda classe que ser utilizada como uma aplicao Android deve estardefinida no manifesto, caso contrrio ir gerar uma exceo.

    Linha 14 Ttulo da aplicao. O valor dessa string estar sempre presente na barra de

    ttulo da aplicao, basta ser definida nesta tag android:label. Linha 16 Indica que uma atividade pode ser utilizada como ponto de entrada para

    um aplicativo.

    Linha 18 Indica que essa a classe que inicia a aplicao.

    Executando a aplicaoAntes de iniciar a aplicao, devemos indicar o emulador. Para isso, com o emulador j

    criado podemos selecionar o cone do Android Virtual Device Manager na toolbar mascado emvermelho na imagem.

  • 7/26/2019 Cur So Android

    29/76

    Apostila Android - Programando passo a passo

    29

    Figura 31 Toolbar.

    Selecione o emulador criado anteriormente, ou o de sua preferncia caso existam outros eclique em Start.

    Figura 32 - Emulador(es).

    Na tela seguinte clique em Launch e aguarde at o emulador carregar completamente, ficandona tela inicial do sistema, caso ela esteja bloqueada, segure o cone de desbloqueio e arraste-o para

    direita.

    Figura 33 - Segunda tela.

  • 7/26/2019 Cur So Android

    30/76

    Apostila Android - Programando passo a passo

    3#

    Figura 34 - Tela inicial do emulador.

    Exerccios.

    1. Alterar o resource string hello para outro valor2. Alterar o app_name para outro valor.

    3. Incluir outros controles TextView na tela e adicionar um resource string diferente paracada.

  • 7/26/2019 Cur So Android

    31/76

    Apostila Android - Programando passo a passo

    3"

    Arquitetura Android

    O diagrama abaixo ilustra os principais componentes do sistema operacional Android:

    Figura 35 - Componentes do sistema operacional Android.

    ApplicationsEssa camada apresenta aplicaes que j vem junto com o android, so aplicaes

    fundamentais para o funcionamento do sistema operacional, e facilitam muito a vida dosdesenvolvedores, pois j incluem diversas funcionalidades que sero usadas nas aplicaes.

    Cliente de e-mail,

    Programa de SMS,

    Agenda,

    Mapas,

    Navegador,

    Contatos entre outros.

    Application FrameworkAo fornecer uma plataforma de desenvolvimento aberta, o Android oferece aos

    desenvolvedores a capacidade de criar aplicaes extremamente ricas e inovadoras. Os

  • 7/26/2019 Cur So Android

    32/76

    Apostila Android - Programando passo a passo

    32

    desenvolvedores so livres para aproveitar as informaes do dispositivo hardware, acesso alocalizao, execuo de servios em background, definir alarmes, adicionar notificaes na barra destatus, muito mais.

    A arquitetura do aplicativo projetado para simplificar a reutilizao de componentes,qualquer aplicao pode publicar as suas capacidades e qualquer outro aplicativo pode ento fazeruso dessas capacidades (sujeito a restries de segurana).

    Essa camada tambm apresenta as classes e interfaces bsicas para criarmos nossasaplicaes e roda-las automaticamente no dispositivo.

    LibrariesO android inclui um conjunto de bibliotecas C/C++ utilizadas por vrios componentes do

    sistema. Estas funcionalidades so expostas aos desenvolvedores atravs do framework:

    System C library uma implementao derivada da biblioteca C padro

    sistema (libc) do BSD sintonizada para dispositivos rodando Linux.

    Media Libraries baseado no PacketVideos OpenCORE; as bibliotecas

    suportam os mais populares formatos de udio e vdeo, bem como imagens

    estticas.

    Surface Manager gere o acesso ao subsistema de exibio bem como as

    mltiplas camadas de aplicaes 2D e 3D;

    LibWebCore um web browser engine utilizado tanto no Android Browserquanto para exibies web.

    SGL o engine de grficos 2D

    3D libraries uma implementao baseada no OpenGL ES 1.0 APIs; as

    bibliotecas utilizam acelerao 3D via hardware (quando disponvel) ou o

    software de renderizao 3D altamente otimizado includo no Android.

    FreeType renderizao de fontes bitmap e vector

    SQLite um poderoso e leve engine de banco de dados relacional disponvel

    para todas as aplicaes

    Android RuntimeO Android inclui um grupo de bibliotecas que fornece a maioria das funcionalidades

    disponveis nas principais bibliotecas da linguagem Java.

    Toda aplicao Android roda em seu prprio processo, com sua prpria instncia da mquinavirtual Dalvik. O Dalvik foi escrito de forma a executar vrias VMs eficientemente. Ele executa

  • 7/26/2019 Cur So Android

    33/76

    Apostila Android - Programando passo a passo

    33

    arquivos .dex, que otimizado para consumo mnimo de memria. A VM baseada em registros eroda classes compiladas pela linguagem Java que foram transformadas em arquivos .dex, atravs daferramenta dx includa no SDK.

    O Dalvik VM baseia-se no kernel do Linux para funcionalidades subjacentes como oencadeamento e a gesto de baixo nvel de memria.

    Linux KernelUtiliza a verso 2,6 do kernel do Linux para os servios centrais do sistema, tais como

    segurana, gesto de memria, gesto de processos, etc. O kernel tambm atua como uma camada deabstrao entre o hardware e o resto do software.

  • 7/26/2019 Cur So Android

    34/76

    Apostila Android - Programando passo a passo

    3/

    Criar uma aplicao simples.

    Vamos criar a primeira aplicao funcional Android para que possamos estudar os windgets(controles) disponveis e como manipula-los.

    Para isso vamos criar um aplicativo de calculadora simples, com as funes de adio,subtrao, multiplicao, diviso e porcentagem.

    Vamos criar um novo projeto, para isso siga os passos apresentados anteriormente na seoCriando Projetos Android no Eclipse.

    Nomear o projeto como Claculadora Simples.

    Usar o Android 2.3.3.

    Nomear o pacote como curso.android.

    Vamos editar a tela da aplicao, para isso abra o arquivo main.xml do diretrio src\layout e crie oseguinte layout:

    Figura 36 - Tela da calculadora simples.

  • 7/26/2019 Cur So Android

    35/76

    Apostila Android - Programando passo a passo

    3'

    sando !id"ets bsicos

    O cdigo e a explicao do mesmo para gerar o layout da calculadora encontra-se na tabela abaixo.

    Arquivo

    android:layout_width=wrap_content

    android:layout_height=wrap_content

    android:text=@string/su"/>

    android:id=@+id/r(ultiplandroid:layout_width=wrap_content

    android:layout_height=wrap_contentandroid:text=@string/multi/>

  • 7/26/2019 Cur So Android

    36/76

    Apostila Android - Programando passo a passo

    3+

    android:id=@+id/r#ivisaoandroid:layout_width=wrap_content

    android:layout_height=wrap_content

    android:text=@string/div/>

    android:layout_width=wrap_content

    android:layout_height=wrap_content

    android:text=@string/perc/>

    TextView

    Controle utilizado para exibir informaes na tela, e que no possam ser alteradas.Propriedade Valor Explicao

    android:layout_width fill_parent A largura do controle ser igual alargura do controle pai.

    android:layout_height wrap_content A altura do controle serproporcional ao seu contedo.

    android:text @string/hello Texto que ser exibido no controle.

    android:layout_marginRight 5dp Espaamento a direita.

  • 7/26/2019 Cur So Android

    37/76

    Apostila Android - Programando passo a passo

    3,

    EditTextControle responsvel por receber dados do teclado.

    Propriedade Valor Explicao

    android:id @+id/etPrimeiroValor Nome do controle, esse valor utilizado para acessar propriedadesnas classes. Deve seguir esse formato:@+id/ .

    android:layout_width match_parent Igual ao fill_parent. A largura docontrole ser igual a largura docontrole pai.

    android:layout_height wrap_content A altura do controle ser proporcionalao seu contedo.

    android:hint @string/valor1 Informa o que deve ser inserido no

    controle de texto, funciona como umadica e some assim que o controlerecebe o foco.

    android:inputType numberDecimal Tipo de insero no controle, nestecaso apenas nmeros, pontos evirgulas podero ser adicionados,existem muitos outros como: Text,date, phone etc.

    RadioGroupControle que agrupa controles do tipo RadioButton, fazendo com que independente de

    quantos RadioButtons existam apenas um possa ser selecionado.

    RadioButtonPropriedade Valor Explicao

    android:checked true Indica se o controle iniciarselecionado.

    ButtonBoto de comando, quando clicado dispara uma ao, um evento que ser interceptado em

    uma classe para que o desenvolvedor adicione uma funcionalidade.

    #anipulando o la$out com uma classe

    Neste momento, vamos criar o link entre o layout xml e classe java que ser responsvel pelalgica do nosso programa.

    Para isso vamos abrir a classe j criada no diretrio src CalculadoraSimplesActivity.java

  • 7/26/2019 Cur So Android

    38/76

    Apostila Android - Programando passo a passo

    3

    Figura 37 - Classe CalculadoraSimplesActivity.java

    Como visto anteriormente ns temos o nome do pacote, os pacotes importados, a nossa classeherdando de Activity, o mtodo principal onCreate implementando o onCreate da classe super efinalmente o mtodo setContentView referenciando o layout main.xml

    Precisamos ter acesso aos widgets que adicionamos ao layout para manipula-los na classe eno caso desta app, efetuar um calculo entre dois valores e exibir o resultado.

    Como o layout no tem conhecimento da existncia da classe e a nica referncia da layoutna classe o nome dela sendo adicionado ao contentView, ambas so desconectadas uma da outra, oque precisamos fazer adicionar a referncia dos widgets criando variveis de cada tipo de objetoque precisamos manipular do layout.

    Referenciando objetos do layoutA classe activity possui um mtodo chamado findViewById, em que, passando o ID de um

    widget este mtodo retorna um objeto que faz referncia direta ao widget, tanto para GET como paraSET. A sintaxe do mtodo :

    View findViewById (int id)

    O mtodo deve sempre ser executado dentro do mtodo onCreate, pois nesse momento queteremos o link entre a classe e o layout.

    Uma questo importante sobre esse modelo : Como saberei qual o ID int de um widget, sequando informo o ID no layout informo como string?

    Dentro do diretrio gen no pacote da app existe uma classe chamada R, esta classe automaticamente gerada e modificada conforme vamos adicionado recursos ao projeto, dai o R deResources, essa classe contem uma referencia do widgets, layouts, string, cones e etc queadicionamos ao projeto, porm ele se utiliza do ID ou nome do objeto que adicionamos para geraruma propriedade do tipo int nica dentro de toda app, assim sabemos qual o ID int do nossowidget.

    No trecho de cdigo a seguir podemos ver todos os nossos widgets adicionadosanteriormente, e gerados na classe R como propriedades, isso tambm acontece com o layout, porisso ele esta acessvel dentro da classe e referenciado no mtodo setContentView no formato:

    setContentView(R.layout.main);

  • 7/26/2019 Cur So Android

    39/76

    Apostila Android - Programando passo a passo

    39

    Figura 38 - Trecho de cdigo da classe R.

    Sendo assim suponhamos que queremos referenciar o EditText etPrimeiroValor faremosassim:

    EditText variavel_nome = (EditText)findViewById(R.id.etPrimeiroValor );O trecho "(EditText)" um processo chamado cast, possvel em linguagens orientadas a

    objeto para converter um objeto em um valor tipado.

    Abaixo o cdigo completo da referncia de todos os widgets do layout.

    Figura 39 - Referncia dos controles.

  • 7/26/2019 Cur So Android

    40/76

    Apostila Android - Programando passo a passo

    /#

    Event ListenersNo Android, h mais de uma maneira para interceptar os eventos de interao do usurio com

    sua aplicao. Ao considerar os eventos dentro de sua interface de usurio, a abordagem capturaros eventos do objeto View especfico que o usurio interage. A classe View fornece os meios para o

    fazer.Por exemplo, quando uma View pressionado, e o mtodo onTouchEvent () chamado no

    object, no entanto, a fim de interceptar este evento a classe tem que estender esse evento e substituiro mtodo. No entanto, estendendo-se cada objeto View, a fim de lidar com um evento como esse noseria prtico. por isso que a classe View tambm contm uma coleo de interfaces aninhadas comcallbacks que voc pode muito mais facilmente definir. Estas interfaces, chamadas de EventListenersso sua porta de entrada para capturar a interao do usurio com a interface.

    Por exemplo, se queremos capturar o clique de botes devemos implementar o ListenerOnClickListener e implementar o mtodo onClick, alem de setar o objeto do boto para reconhecer aclasse atual como seu Listener: button. setOnClickListener(this);

    Vamos implementar o clique do boto calcular da nossa app.

    Primeiro precisamos implementar a interface do ClickListener responsvel por "escutar"cliques de botes no layout, a implementao feita como na linha baixo:

    publicclass%alculadora&imles'ctivity extends'ctivity implementsOnClickListener

    Note que aps adicionar o listener, o nome da classe ficou sublinhada de vermelho, poisprecisamos implementar o mtodo responsvel por executar aes de clique sempre que um Listener"escutar" um clique de boto.

    Para isso posicione o cursor do mouse sobre o nome da classe e aguarde a lista de opes

    aparecer, aps, selecione a opo "Add unimplemented methods".

    Figura 40 - Implementao do clique.

    Ser gerado o mtodo onClick, onde iremos implementar a lgica do clique.

    Figura 41 - Mtodo onClick

    Agora precisamos informar o boto "bCalcula" que transformamos no objeto "calcula" queele usar como Listener nossa classe CalculadoraSimplesActivity que possui a implementao deOnClickListener, para isso basta setar o mtodo setOnClickListener do boto passando comoparmetro a classe que estamos trabalhando, tudo isso no mtodo onCreate, assim:

  • 7/26/2019 Cur So Android

    41/76

    Apostila Android - Programando passo a passo

    /"

    Figura 42 - Boto implementa Listener click.

    Voltando o mtodo onClick que far o calculo dos valores, vamos apenas deixar definido ummtodo CalculaValor(), o qual vamos programar mais tarde.

    Figura 43 - Mtodo CalculaValor.

    Event Listeners para mais de um widget

    Antes de implementar o mtodo calcular, precisamos saber qual operao ser efetuada.Foi criado no layout um RadioGroup com um RadioButton para cada operao, o que

    devemos fazer setar uma varivel com o nome da operao sempre que selecionado outroRadioButton, ou seja no evento onChange.

    Primeiramente vamos criar uma nova varivel para guardar a operao, essa varivel deveiniciar com um valor padro igual ao RadioButton que fica marcado no inicio da aplicao, no caso oboto de adio.

    Figura 44 - Nova varivel.

    Agora devemos implementar o Listener responsvel por "escutar " alteraes de seleo emRadioButtons, no caso o OnCheckedChangeListener , da mesma forma que implantamos oOnClickListener.

  • 7/26/2019 Cur So Android

    42/76

    Apostila Android - Programando passo a passo

    /2

    Figura 45 - Implementa change listener

    E da mesma forma que o listener de click devemos implementar o mtodo posicionando o

    mouse no nome da classe e clicado em Add unimplemented methods.

    Figura 46 - Implementar change listener

    Ser gerado o mtodo onCheckedChanged.

    Figura 47 - Mtodo onCheckedChanged.

    Agora falta apenas indicar para a varivel do RadioGroup chamada "operacao" que ela deveusar a classe atual como Listener, para "escutar" quando uma mudana de seleo feita. Para issobasta executar o mtodo setOnCheckedChangeListener no mtodo onCreate da classe.

    Figura 48 - RadioGroup implementa Listener

    Analisando o mtodo:

    publicvoidon%hec$ed%hanged(!adio"rou arg)* intarg+, -

    .

    Podemos notar que ele recebe por parmetro um RadioGroup e um int. O primeiro parmetrono nos interessa, j que temos apenas um RadioGroup na tela, mas o segundo parmetro faz indicaqual RadioButton foi selecionado. Da mesma forma quando referenciamos nossos controles de telaatravs da instruo R.id.NOME_DO_CONTROLE, esse modelo pode ser usado aqui, atravs deuma estrutura de deciso (IF ou SWICH) para sabermos quem foi clicado.

  • 7/26/2019 Cur So Android

    43/76

    Apostila Android - Programando passo a passo

    /3

    No cdigo abaixo, podemos ver que foi testado cada um dos RadioButtons e quandoencontrado o ID do widget igual ao id do parmetro "arg+" alterada a varivel operacaoSelecionadacom a operao que queremos efetuar.

    Figura 49 - Mtodo onCheckedChanged implementado.

    Receber e enviar dados para telaPrecisamos agora efetivamente efetuar o clculo dos dois valores recebidos.

    Para isso vamos voltar ao mtodo CalculaValor , nele criaremos duas variveis double parareceber os valores digitados nos controles EditText.

    Como o contedo do EditText do tipo string, vamos fazer uso de um mtodo paraconverso chamado: ou0le1parse#ou"le(string,2

    Para acessar o valor do campo acessamos o mtodo getText() que retorna um tipo Editable, eem seguida fazer uso do mtodo toString() para convertermos o valor para string. Assim temos:

    Figura 50 - Declarao e converso das variveis.

    Agora devemos verificar qual operao foi selecionada e ento efetuar o calculo da mesma,colocando o resultadoConta em outra varivel do tipo double.

    A comparao de igualdade entre dois objetos no JAVA, como melhor prtica dedesenvolvimento, deve ser feita atravs do mtodo "equals":

    o03ect1e4uals(o03ect,2

    Aps a criao da lgica, o resultado final deve ser mais ou menos esse:

  • 7/26/2019 Cur So Android

    44/76

    Apostila Android - Programando passo a passo

    //

    Figura 51 - Lgica de clculo.

    Agora falta apenas exibir o resultado na pgina, para isso faremos uso do mtodo setText() dowidget EditText.

    Como melhoria de interface, quando a operao for porcentagem, vamos concatenar o

    resultado com o caractere "%" .

    Figura 52 - Setar valor na tela.

    O mtodo String.valueOf(resultadoConta), converte o valor double para string.

    Cdigo da aplicao

    A seguir temos o cdigo completo da classe JAVA e do arquivo strings.xmlArquivo CalculadoraSimplesActivity.java

    packagecurso1android2

    importandroid1a1'ctivity2

    importandroid1os1#undle2

    importandroid1view1View2importandroid1view1View15n%lic$Listener2

    importandroid1widget1#utton2

    importandroid1widget1EditText2

    importandroid1widget1!adio"rou2

    importandroid1widget1!adio"rou15n%hec$ed%hangeListener2importandroid1widget1TextView2

    publicclass%alculadora&imles'ctivity extends'ctivity implements

    5n%lic$Listener* 5n%hec$ed%hangeListener -

    /66 %alled when the activity is 7irst created1 6/

    EditText rimeiroValor* segundovalor2!adio"rou oeracao2

    #utton calcula2TextView resultado2

    &tring oeracao&elecionada= 8add82

  • 7/26/2019 Cur So Android

    45/76

    Apostila Android - Programando passo a passo

    /'

    95verride

    publicvoidon%reate(#undle savednstance&tate, -super1on%reate(savednstance&tate,2

    set%ontentView(!1layout1main,2

    rimeiroValor= (EditText, 7indView#yd(!1id1etrimeiro!alor,2

    segundovalor= (EditText, 7indView#yd(!1id1et$egundo!alor,2oeracao= (!adio"rou, 7indView#yd(!1id1rg&peracao,2

    calcula= (#utton, 7indView#yd(!1id1"alcula,2

    resultado= (TextView, 7indView#yd(!1id1tv,esultado,2

    calcula1set5n%lic$Listener(this,2oeracao1set5n%hec$ed%hangeListener(this,2

    .

    publicvoidon%lic$(View v, -

    // TODO'uto;generated method stu0%alculaValor(,2

    .

    privatevoid%alculaValor(, -// TODO'uto;generated method stu0

    doublevalor+ = ou0le1parse#ou"le(rimeiroValor1getText(,1to&tring(,,2

    doublevalor = ou0le1parse#ou"le(segundovalor1getText(,1to&tring(,,2

    doubleresultado%onta = )2

    if(oeracao&elecionada1e4uals(8add8,,-

    resultado%onta = valor+ valor2.elseif(oeracao&elecionada1e4uals(8su08,,-

    resultado%onta = valor+ ; valor2

    .elseif(oeracao&elecionada1e4uals(8mul8,,-

    resultado%onta = valor+ 6 valor2.elseif(oeracao&elecionada1e4uals(8div8,,-

    resultado%onta = valor+ / valor2

    .elseif(oeracao&elecionada1e4uals(8er8,,-resultado%onta = (valor+ 6+)),/ valor2

    .

    if(oeracao&elecionada1e4uals(8er8,,-

    resultado1setText(&tring1value&f(resultado%onta, 8 8,2.else-

    resultado1setText(&tring1value&f(resultado%onta,,2.

    .

    publicvoidon%hec$ed%hanged(!adio"rou arg)* intarg+, -

    // TODO'uto;generated method stu0switch(arg+, -

    case!1id1r'dicao:

    oeracao&elecionada= 8add82

    break2

    case!1id1r$u"tra:oeracao&elecionada= 8su082

    break2

    case!1id1r(ultipl:

    oeracao&elecionada= 8mul82

    break2

  • 7/26/2019 Cur So Android

    46/76

    Apostila Android - Programando passo a passo

    /+

    case!1id1r#ivisao:

    oeracao&elecionada= 8div82break2

    case!1id1rorcent:

    oeracao&elecionada= 8er82

    break2

    default:break2

    .

    .

    .

    Arquivo string.xml

    %alcular valores simles

    %alculadora&imles

    igite um valorigite outro valor

    'di@o

  • 7/26/2019 Cur So Android

    47/76

    Apostila Android - Programando passo a passo

    /,

    Estrutura de um projeto Android

    A seguinte estrutura ser criada ao adicionarmos um novo projeto Android ao Eclipse:

    Figura 54 - Estrutura de um projeto Android.

    src - Aqui ficar o pacote da aplicao, com as classes que iremos criar.

    gen - Contm os arquivos JAVA gerados pela ADT, esses arquivos so geradosautomaticamente, e mais dados sero includos neles conforme vamos desenvolvendoa aplicao, so classes de manipulao exclusiva do eclipse.

    Android 2.3.3 - basicamente o SDK android com todos os pacotes

    Android Dependencies - Metadados do SDK, so classes de manipulao exclusiva doeclipse.

    assets - Esta pasta inicia vazia, usada para salvar arquivos como: textura, dados dejogos, tipos de fonte e etc. Os arquivos adicionados nesta pasta, sero compiladosjuntamente com o arquivo APK.

  • 7/26/2019 Cur So Android

    48/76

    Apostila Android - Programando passo a passo

    /

    bin - Diretrio de sada da compilao, aqui ser encontrado o instalador doaplicativo (arquivo APK) e outros recursos compilados.

    res Contm os recursos da aplicao como cones, imagens, arquivos de layout,strings e etc,

    anim - Arquivos XML que so compilados como objetos de animao. color Arquivos XML que descrevem cores.

    drawable Bitmap da aplicao (PNG, JPEG ou GIF), esse diretrio muitomais abrangente e pode conter formas, tratamentos de estado etc.

    layout Arquivos XML que so compilados como telas da aplicao.

    menu Arquivos XML que definem menus na aplicao.

    raw Arquivos de grande volume, esse o diretrio ideal para arquivos demdia como vdeos e udios.

    values - Textos da aplicao, essa estrutura j contem um arquivo chamado"strings.xml", mas outros podem ser criados

    xml Arquivos XML diversos.

    AndroidManifest Arquivo que descreve a natureza da aplicao e cada um dos seuscomponentes.

  • 7/26/2019 Cur So Android

    49/76

    Apostila Android - Programando passo a passo

    /9

    Projeto de a"enda de contatos

    At agora vimos os conceitos bsicos para desenvolver uma aplicao android e comotrabalhar com alguns widgets.

    A partir de agora vamos criar o projeto principal deste curso, esta app ser mais funcional eser responsvel por cadastrar dados de contatos como Nome, email, telefone e foto.

    Pra isso, vamos criar uma novo projeto do tipo Android Project na nossa workspace, chamadoAgendaCurso.

    As funcionalidades dessa app sero simples, ao iniciar, a primeira tela exibe a lista decontatos cadastrados com foto, nome, email e telefone, nela existe a possibilidade de clicar em umboto para inserir um novo contato ou selecionar um contato existente para editar ou excluir. Na telade cadastro o usurio insere os dados do contato, e aciona a cmera do dispositivo para fotografar ocontato e guardar essa imagem na galeria.

    A primeira tela a ser trabalhada o main.xml, que deve ter o seguinte aspecto:

    Figura 55 - Primeira tela, main.xml.

  • 7/26/2019 Cur So Android

    50/76

    Apostila Android - Programando passo a passo

    '#

    Nessa tela existe um novo widget chamado ListView, que tem a funo de listar volume dedados. O cdigo para tela segue abaixo:

    Arquivo main.xml

    Other", como mostrado na imagemabaixo.

    Figura 56 - Adicionar layout.

  • 7/26/2019 Cur So Android

    51/76

    Apostila Android - Programando passo a passo

    '"

    Em seguida selecione Android XML File dentro do diretrio Android e clique em Next.

    Figura 57 - Android XML File.

    De um nome ao novo layout e selecione Finish

    Figura 58 - Nome do layout.

  • 7/26/2019 Cur So Android

    52/76

    Apostila Android - Programando passo a passo

    '2

    O resultado do layout precisa parecido com a imagem:

    Figura 59 - Tela de contato.

    Para chegar a esse resultado utilizaremos o cdigo:

    Arquivo contato.xml

  • 7/26/2019 Cur So Android

    53/76

    Apostila Android - Programando passo a passo

    '3

    android:layout_width=fill_parent

    android:layout_height=wrap_contentandroid:orientation=vertical>

  • 7/26/2019 Cur So Android

    54/76

    Apostila Android - Programando passo a passo

    '/

    android:layout_height=wrap_content

    android:orientation=hori)ontalandroid:gravity=center_hori)ontal>

    Nessa tela existem 3 widgets novos:

    ScrollViewComo o nome indica, cria um scroll caso o desenho da tela exceda o tamanho do display do

    dispositivo.

    ImageViewExibe imagens, tanto de arquivo como oriundas de um bipmap gerado via cdigo.

    ImageButtonMsma funo de um Button, porm exibe uma imagem ao invs de um texto.

    sando Ima"ens

    Para dar mais realismo e beleza a aplicao, vamos utilizar algumas imagens.

    Para adicionar essas imagens basta arrasta-las do diretrio onde elas esto para dentro dapasta drawable no Eclipse, ficando assim:

    Figura 60 - Adicionar imagens.

  • 7/26/2019 Cur So Android

    55/76

    Apostila Android - Programando passo a passo

    ''

    Uma dessas imagens ser o icone da aplicao no dispositivo, para utiliza-lo precisamosindicar o icone no AndroidManifest, informando o nome dele na tag android:icon.

    Figura 61 - Indicao do Icone.

    As outras duas imagens que precisamos so para o layout contato, uma para o ImageView eoutra para o ImageButton.

    Criar uma nova Activit$

    Precisamos de uma activity para exibir a tela de cadastro de contato e manipular asinformaes, vamos ento criar uma nova classe, no diretrio src, clique com o boto direito eselecione "New -> Class", e informe o nome da classe como Contato em seguida clique em Finish.

    Figura 62 - Adicionar nova classe.

    Para transformar essa classe em uma Activity, precisamos de dois passos, primeiro estender aclasse Activity, para isso o cdigo fica assim:

  • 7/26/2019 Cur So Android

    56/76

    Apostila Android - Programando passo a passo

    '+

    Figura 63 - Nova Activity.

    O segundo passo sobrescrever o mtodo onCreate.

    Todos os mtodos da classe Activity e outras classes que possam ser sobrescritos estoacessveis em uma lista. Para visualizar essa lista, clique com o boto direito no cdigo fonte daclasse e selecione "Source -> Override/Implement Methods"

    Figura 64 - Override mtodos.

    Na listagem que abrir, devemos procurar e selecionar dentro do contexto de Activity omtodo onCreate(bundle) e clicar em OK.

  • 7/26/2019 Cur So Android

    57/76

    Apostila Android - Programando passo a passo

    ',

    Figura 65 - Seleciona mtodo.

    Como resultado o cdigo ficar assim:

    Figura 66 - Sobrescrever onCreate.

    Abaixo do mtodo super.onCreate(savedInstanceState) vamos indicar qual o layout queremosusar para essa Activity, informando o cdigo:

    set%ontentView(!1layout1contato,2

    Agora precisamos referenciar nosso controles da tela para classe, assim como fizemos emoutros projetos, utilizando o mtodo findViewById o resultado final esta na imagem abaixo.

  • 7/26/2019 Cur So Android

    58/76

    Apostila Android - Programando passo a passo

    '

    Figura 67 - Implementado controles.

    Iniciando outra Activit$

    Vamos voltar para a classe principal AgendaCursoActivity e implementar a chamada paraclasse contato ao clicar no boto Adicionar Contato.

    Crie o cdigo de referencia e implementao do clique do boto.

    Figura 68 - Implementa clique.

  • 7/26/2019 Cur So Android

    59/76

    Apostila Android - Programando passo a passo

    '9

    Toda tela do android uma Activity e todo Activity deve ser instanciada a partir de umaIntent.

    Uma intent uma forma de comunicao entre componentes de uma aplicao ou entreaplicaes diferentes. Para chamar a tela de contatos utilizaremos uma intent. Abaixo segue o cdigoresponsvel.

    //%ria a intent assando o contexto e a classe 4ue 4ueremos iniciar

    ntent contato = newntent(this* %ontato1class,2//inicia a activity assando a intent

    start'ctivity(contato,2

    Se rodarmos a aplicao agora receberemos um erro, pois a Activity Contato no foideclarada no AndroidManifest.

    Adicione a nova Activity abaixo da principal:

    Figura 69 - Nova activity.

    Criar um classe de modelo de dados

    Para manipularmos os contatos e utilizar de boas prticas no desenvolvimento, vamos criaruma classe de modelo para tratar as informaes da tela.

    Para isso, vamos criar uma nova classe dentro do pacote da nossa aplicao chamadaContatoModel.

    Arquivo ContatoModel.java

    packagecom1treinamento1agenda2

    import3ava1io1&erialiCa0le2

    //&erialiCavel ara ser assado entre ntnetspublicclass%ontatoAodel implements&erialiCa0le -

    privatestaticfinallongserial!ersion6#= +L2

    privatelongid2

    private&tring nome2

    private&tring email2

    private&tring tele7one2

    private&tring 7otoDri2

    publiclonggetd(, -

  • 7/26/2019 Cur So Android

    60/76

    Apostila Android - Programando passo a passo

    +#

    returnid2

    .

    publicvoidsetd(longid, -

    this1id= id2

    .

    public&tring getome(, -

    returnnome2

    .

    publicvoidsetome(&tring value, -this1nome= value2

    .

    public&tring getEmail(, -

    returnemail2.

    publicvoidsetEmail(&tring value, -

    this1email= value2.

    public&tring getTele7one(, -returntele7one2

    .

    publicvoidsetTele7one(&tring value, -this1tele7one= value2

    .

    public&tring getFotoDri(, -return7otoDri2

    .

    publicvoidsetFotoDri(&tring value, -

    this17otoDri= value2

    .

    // Dsado ara o 'rray'dater na ListView95verride

    public&tring to&tring(, -

    returnnome 8 ; 8 tele7one2

    .

    .

    Agora precisamos inserir os dados da tela em uma instncia desta classe.

    'etornar dados para outra Activit$

    Precisamos agora implementar os botes de confirmar e cancelar na tela de contato e retornaresse valor para a tela principal.

  • 7/26/2019 Cur So Android

    61/76

    Apostila Android - Programando passo a passo

    +"

    Quando clicar em Confirmar devemos colocar os dados da tela na instncia da classeContatoModel.

    Declaramos no escopo de classe uma varivel contato do tipo ContatoModel no escopo declasse, em seguida vamos criar um mtodo que leia a tela e coloque os dados da classe de modelo:

    Figura 70 - Inserir dados no objeto de contato.

    Esse mtodo deve ser chamado no clique do boto confirmar, e o resultado inserido noretorno para tela principal.

    Figura 71 - Botes do layout contato.

    Quando queremos retornar dados para uma intent precisamos retorna-lo tambm em umaintent, colocando-o numa coleo de Extras, em seguida chamamos um mtodo herdado chamadosetResult passando o resultado do processo, no caso RESULT_OK e se for necessrio um objeto deretorno. Finalmente, terminamos a aplicao com o mtodo Finish.

    'eceber dados de outra Activit$

    Os dados oriundos de outra activity so recebidos no mtodo onActivityResult, esse mtododeve ser sobrescrito usando o a lista de mtodos para Override/Implement Methods, acessvel porboto direito no cdigo e selecionando "Source -> Override/Implement Methods " .

    Abaixo o cdigo atual da classe AgendaCursoActivity

  • 7/26/2019 Cur So Android

    62/76

    Apostila Android - Programando passo a passo

    +2

    Figura 72 - Cdigo parcial da activity

    Note as duas diferenas marcadas em Negrito e vermelho:

    ListActivity - Como essa classe vai exibir uma listagem de dados, devemos herdar deListActivity ao invs de Activity.

    startActivityForResult - Como queremos retornar dados da classe Contato o mtodostartActivity no mais usual, para isso devemos utilizar o startActivityForResult.

  • 7/26/2019 Cur So Android

    63/76

    Apostila Android - Programando passo a passo

    +3

    J podemos rodar aplicao e cadastrar alguns contatos. Logicamente se sairmos da aplicaoperderemos os contatos cadastrados pois eles no so persistidos no aparelho.

    E%ibir mensa"ens

    Para tornar nossa aplicao mais interativa, vamos exibir uma mensagem quando retorna paratela principal, dizendo se o usurio clicou em confirmar ou cancelar. Pra isso vamos usar o objetoToast que exibe mensagens rpidas.

    Figura 73 - Mensagem com Toast.

    No mtodo makeText do objeto Toast o parmetos so:

    Contexto;

    Mensagem; Tempo de exibio.

    (elecionar itens na )ist*ie!

    A ideia agora ao clicar em um contato na listagem, enviar os dados para o Activity Contato,editar, retornar para a listagem e atualiza-la.

    O primeiro passo capturar o clique na lista, para isso vamos implementar um OverrideMethod chamado onListItemClick.

    No clique vamos inserir dois parmetros na intent, o mtodo update e o objeto do contato,outra alterao no inserir o parmetro insert quando clicar no boto para adicionar novos contatos,assim evitamos problemas do mtodo getExtras da intent retornar nulo.

  • 7/26/2019 Cur So Android

    64/76

    Apostila Android - Programando passo a passo

    +/

    Figura 74 - Clique da listagem.

    'eceber dados em uma Activit$

    Agora que iniciamos a Activity Contato passando dois parmetros, precisamos receber elesnessa classe, trata-los e enviar um resultado de volta.

    O recebimento de dados tem que ser efetuado no mtodo onCreate, e tem por como base a

    manipulao de objetos do tipo Bundle que so colees de valores string contidos dentro dos extrasde uma Intent.

    Figura 75 - Leitura de parmetros.

  • 7/26/2019 Cur So Android

    65/76

    Apostila Android - Programando passo a passo

    +'

    tili+ando (,)ite

    Precisamos nesse momento persistir os dados no dispositivo, isso pode ser feito de diversasmaneiras, uma delas a possibilidade de fazer uso de uma ferramenta de banco de dados, neste casoo SQLite, uma ferramenta livre e de domnio publico.

    Vamos criar uma nova classe dentro do pacote da nossa aplicao chamada SQLHelper, essaclasse precisa herdar as funcionalidades da classe SQLiteOpenHelper e implementar os mtodosnecessrios necessrio que sero pedidos, ficando assim:

    Figura 76 - Classe para abrir banco de dados.

    Agora vamos criar algumas propriedades obrigatrias para toda implementao de banco de

    dados no Android.Essas propriedades so:

    String para o nome do banco de dados;

    Int para a verso do banco essa propriedade para controle de verso e no serusada nessa abordagem.

    Script de criao da tablea uma propriedade com todo o script de criao da tabela necessria pois no mtodo onCreate sero criadas todas as tabelas do banco.

    O resultado esse:

  • 7/26/2019 Cur So Android

    66/76

    Apostila Android - Programando passo a passo

    ++

    Figura 77 - Propriedades principais.

    Agora devemos implementar os mtodos de criao e atualizao do banco de dados:

    Figura 78 - Criao e atualizao do banco de dados.

    O mtodo onUpgrade foi implementado desta forma apenas para fins didticos, o corretoseria criar backups dos dados em outro banco ento efetuar as atualizaes necessrias, e logo apsretornar os dados salvos. Mas no momento essa implementao suficiente.

    Falta apenas alterar o construtor da classe:

    Figura 79 - Construtor.

    Passando o contexto recebido, o nome do banco que criamos como um atributo e a verso dobanco, tambm um atributo, o valor null que tem a funo de retornar sub-classes de cursores, paraaplicaes mais avanados e que no faremos uso aqui.

    Classe de acesso a dadosVamos criar uma classe que manipule os dados dos contatos da agenda, essa nova classe far

    uso da classe SQLHelper recm criada.

    Criaremos no pacote da aplicao uma nova classe chamada ContatoDAO, o sufixo DAO euma questo de padronizao e boas prticas, onde identifica que essa classe faz acesso a dados,DAO significa Data Access Object.

    Trs atributos so necessrios de imediato:

  • 7/26/2019 Cur So Android

    67/76

    Apostila Android - Programando passo a passo

    +,

    Figura 80 - Inicio da classe DAO.

    Um objeto de banco de dados que ser instanciado pela nossa classe SQLHelper.

    Uma instncia da prpria classe SQLHelper.

    Um array de strings com o nome das colunas, que ser utilizado para consultas.

    Os trs primeiros mtodos da classe so:

    Figura 81 - Primeiros mtodos da classe ContatoDAO.

    Contrutor, recebendo um contexto da aplicao. Ele instancia a nossa classeSQLHelper passando o contexto.

    Open, efetivamente cria e abre nosso banco de dados, o mtodo getWritableDatabaseda classe SQLiteOpenHelper que herdada na nossa classe SQLHelper responsvelpor abrir uma instncia de banco para leitura e escrita.

    Close, apenas fecha o banco de dados.

    Mtodo InsertO primeiro mtodo de acesso a dados da nossa classe DAO ser o mtodo INSERT.

    Figura 82 - Mtodo insert.

  • 7/26/2019 Cur So Android

    68/76

    Apostila Android - Programando passo a passo

    +

    Ele faz uso de um objeto chamado ContentValues, esse objeto usado para armazenar umacoleo de dados, que sero usados internamente pelo SQLite para executar algum processo. Eledeve receber dois parmetros pelo mtodo put: uma chave, que neste caso a coluna da tabela, e umvalor, que trata-se do valor para a coluna.

    Aps criar o ContentValues precisamos apenas chamar o mtodo insert do objeto database(SQLiteDatabase) passando o nome da tabela e os valores contidos no ContentValue. O parmetronull refere-se a uma string chamada nullColumnHack, utilizada para quando queremos que umacoluna tenha o valor null.

    Mtodo UpdateO prximo mtodo a ser implementado o update, muito parecido com o insert, porm com

    algumas alteraes na lgica.

    Figura 83 - Mtodo update.

    Primeiro precisamos do id do contato para filtrar qual linha da tabela faremos a alterao.

    O objeto ContentValues criado da mesma forma que no mtodo insert.O parmetro whereClause que contem a clusula where utilizada para filtrar o linha que

    queremos atualizar, o ltimo parmetro setado como null serve para passarmos os valores da clusulawhere caso estivssemos utilizando.

    Mtodo DeleteO mtodo delete muito semelhante ao mtodo update, exceto que no necessita do objeto

    ContentValues .

    Figura 84 - Mtodo delete.

    Consultar DadosA consulta de dados ligeiramente mais complexa que os outros mtodo CRUD e merece um

    pouco mais de ateno.

  • 7/26/2019 Cur So Android

    69/76

    Apostila Android - Programando passo a passo

    +9

    O objeto SQLiteDatabase consegue criar queries dinmicas atravs de alguns parmetros,inclusive manipulando queries mais complexas.

    Figura 85 - Consultar dados.

    O mtodo query do SQLiteDatabase pode receber vrios parmetros:

    Nome da tabela;

    Array com o nome das colunas. Um filtro em formato WHERE (sem a palavra WHERE).

    Valores para o filtro where caso esteja tralhando com o formato de parmetros.

    Clausula GroupBy.

    Clausula Having.

    Clausula OrderBy.

    O retorno do mtodo query um objeto do tipo Cursos, que pode ser percorrido linha a linha.

    Essa interface fornece acesso de leitura e gravao aleatria para o conjunto de resultados

    retornado por uma consulta de banco de dados.No cdigo do mtodo ns lemos cada linha do cursor, movendo-o sempre para frente com o

    mtodo moveToFirst e testando se no passamos do ltimo registro com o mtodo isAfterLast . Setivermos uma linha vlida para ler do Cursor acessamos o array que ele contm com as colunas databela, ao acessa-lo convertemos o dado para o tipo que temos em cada atributo do objetoContatoModel.

    A ordem das colunas nesse array a mesma da ordem do array column declarado no escopoda classe ContatoDAO .

  • 7/26/2019 Cur So Android

    70/76

    Apostila Android - Programando passo a passo

    ,#

    Implementado o acesso a dadosNa Activity principal precisamos implementar o acesso a dados sobre o atributo

    List prevendo a utilizao dos dados gravados no banco.

    Comeando pelos atributos, vamos declarar um novo atributo do tipo ContatoDAO chamado

    contatodao no escopo da classe:

    Figura 86 - Declarao de atributo.

    Em seguida no mtodo onCreate precisamos instanciar esse atributo, abrir a conexo com obanco e substituir o preenchimento da lista de contatos pelo mtodo getContatos.

    Figura 87 - Alterao do mtodo onCreate.

    Para gravar os contatos seja na insero de um novo ou a alterao de um contato existente,vamos utilizar o mtodo de retorno da Activity Contato, o mtodo onActivityResult.

    Nesse mtodo teremos acesso aos mtodos especificos de cada operao do ContatoDAO.

  • 7/26/2019 Cur So Android

    71/76

    Apostila Android - Programando passo a passo

    ,"

    Figura 88 - Alterao para gravar no banco.

    ContextMenuContextMenu so menus de opes que mostrados quando selecionamos por muito tempo

    algum item na tela, ou seja, clicamos no item e seguramos at que aparea o menu.

    Esse tipo de seleo pode ter inumeras funes, no nosso caso vamos utilizar para excluir umcontato.

    A primeira coisa que precisamos fazer um Overrride/Implement Methods para o mtodoonCreateContextMenu.

    Figura 89 - Implementado o menu de contexto.

    Aqui apenas setamos o titlo do menu e adicionamos e adicionamos itens pelo mtodo Add,esse mtodo recebe como parmetros um group id caso o menu precise de agrupadores, o id do item,

    a posio no menu e a descrio.

  • 7/26/2019 Cur So Android

    72/76

    Apostila Android - Programando passo a passo

    ,2

    Em seguida precisamos capturar a seleo do item quando o ContextMenu clicado, masuma vez preciso fazer um Overrride/Implement Methods para o mtodo onContextItemSelected.

    Figura 90 - Implementao do clique no ContextMenu.

    Aqui usamos o mtodo getMenuInfo para buscar as informaes da lista de contatos, deposse destes dados podemos saber qual a posio da listagem foi clicada e chamar o mtodo paraexcluir um contato.

    Exibir um alerta de sim ou noPara exibir alertas precisamos criar um objeto do tipo AlertDialog e adicionar um Listeneraos botes de sim e no do alerta.

    Dentro Lintener devemos implementar o mtodo onClick como mostrado abaixo.

    Figura 91 - Exibir alerta.

    tili+ar a c-mera do dispositivo.

    O acesso a cmera do dispositivo feito atravs de uma Intent, da mesma forma queacessamos outra Activity criada por ns, ou acessamos as aplicaes nativas do aparelho como porexemplo ligaes telefnicas, SMS, Email e etc.

    Para tal vamos alterar o mtodo onClick da Activity Contato. Nesse mtodo ns j filtramosatravs do bloco IF quando clicamos ou no boto Confirmar ou no boto Cancelar, vamos adicionarmais um else if para o boto bTakePicture e em seguida criar uma Intent que acesse a Activity da

  • 7/26/2019 Cur So Android

    73/76

    Apostila Android - Programando passo a passo

    ,3

    cmera que esta em android.provider.MediaStore.ACTION_IMAGE_CAPTURE e inicia-la atravsde um startActivityForResult pois queremos que retorne algum valor, no caso uma foto.

    Figura 92 - Acessar a Cmera .

    No mtodo startActivityForResult vamos receber o bitmap vindo da cmera, salvar essaimagem da galeria do dispositivo e colocar o caminho fsico da imagem em uma varivel do tipo

    string que ser utilizada na hora de salvar o contato.

    Figura 93 - Retorno da Cmera.

    O retorno da cmera estar sempre na coleo Bundle getExtras, na chave de nome "data" equando for uma fotografia ser do tipo Bitmap.

    Adicionamos esse Bitmap ao controle ImageView foto que esta no layout.

  • 7/26/2019 Cur So Android

    74/76

    Apostila Android - Programando passo a passo

    ,/

    Depois acessamos o MediaStore para gravar a imagem na galeria de Images, os parmetrosso:

    ContentResolver - Essa classe permite a aplicao acessar estruturas de dados dodispositivo. Quando voc quiser acessar dados em um provedor de contedo, vocpode usar o objeto ContentResolver no contexto do seu aplicativo para se comunicarcom o provedor como um cliente. O objeto ContentResolver se comunica com oobjeto de provedor, uma instncia de uma classe que implementa ContentProvider. Oobjeto do provedor recebe solicitaes de dados de clientes, executa a ao solicitada,e retorna os resultados. Quando voc quer compartilhar dados da sua aplicao comoutras necessrio criar seu prprio provedor de acesso.

    Objeto Bitmap da imagem.

    Um nome para imagem, se nada for informado ser gerado um valor numrico.

    Uma descrio para a imagem.

    A varivel bmp do tipo Bitmap esta definida no escopo da classe para ser usada em vriosmtodo dela, assim como a varivel imageurl.

    Figura 94 - Variveis novas.Agora podemos setar o valor do atributo fotoUri do ContatoModel, no mtodo gravar dados

    da classe Contato, vamos adicionar a linha que set o endereo da foto usando a varivel imageurl.

    Figura 95 - Gravar endereo da foto.

    A ltima alterao necessria para quando estamos editando um contato existente, nsrecebemos o objeto do contato vindo da Activity principal e setamos os widgets da Activity Contato,isso j esta implementado, mas precisamos incluir a implementao para a foto ser exibida nocontrole ImageView foto.

  • 7/26/2019 Cur So Android

    75/76

    Apostila Android - Programando passo a passo

    ,'

    Figura 96 - Adicionar imagem a tela quando for update.

    Primeiro verificamos se existe uma imagem salva para esse contato, ou seja, tem valor noatributo fotoUri do ContatoModel, se tivermos foto, usamos os objetos de Stream para buscar oarquivo atravs do mtodo openInputStream. Depois decodificamos esse Stream para o tipo Bitmap eadicionamos ao controle de imagem.

    Como estaremos trabalhando com Stream o prprio eclipse vai sugerir para colocarmos todaa lgica dentro de um bloco try/catch.

    Mais uma pequena alterao faz-se necessria, como setamos diretamente o bitmap nocontrole de imagem, esse bitmap nunca pode ser nulo, ento antes do cdigo acima vamos adicionaruma imagem padro para o bitmap, assim ele sempre estar instanciado.

    Figura 97 - Instancia do Bitmap

  • 7/26/2019 Cur So Android

    76/76

    Apostila Android - Programando passo a passo

    Concluso

    Nesta apostila vimos como criar em Android para diversas funcionalidades, aprendemos ainstalar e configurar o ambiente de desenvolvimento. Conhecemos os componentes (widgets) bsicospara as aplicaes. Criamos uma aplicao que acessa dados em banco de dados SQLite.

    Aprendemos a navegar entre telas, passar parmetros entre elas e receber dados de outras telas.Aprendemos tambm como utilizar a cmera do dispositivo e gravar imagens na galeria.