intro a programacao android edicao 1

Upload: vital-vital

Post on 02-Apr-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/27/2019 Intro a Programacao Android Edicao 1

    1/101

    Introduo aPrograo

    Android

  • 7/27/2019 Intro a Programacao Android Edicao 1

    2/101

    Por

    Carlos Silvae Pedro Veloso

    (iterao 1)

    Sobre

    Este livro distribudo livremente sobre a licenaCreative Commons Attribution-

    ShareAlike 3.0 Unported License .

    Resumidamente este licena permite que o trabalho seja distribudo e reutilizadolivremente. Caso existam trabalhos derivados deste, esses mesmos trabalhos devero ser

    tornados acessveis comunidade livremente. Este resumo no invalida a leitura da verso

    completa da licena, para tal consulte a pgina da licena referida em cima.

    Autoria

    Este livro fruto do trabalho conjunto deCarlos SilvaePedro Veloso. Este trabalho

    ia inicialmente ser realizado com o intuito de produzir um livro para venda por uma editora,mas infelizmente o tempo dos autores no permitiu progredir conforme esperavam sendo

    que abandonamos essa modalidade e decidimos aproveitar o trabalho realizado e distribuir

    o mesmo livremente sem qualquer tipo de custo para benefcio de todos os potenciais

    interessados.

    http://creativecommons.org/licenses/by-sa/3.0/deed.en_UShttp://creativecommons.org/licenses/by-sa/3.0/deed.en_UShttps://plus.google.com/116493297166189701407https://plus.google.com/116493297166189701407https://plus.google.com/116493297166189701407https://plus.google.com/102818021082583645551https://plus.google.com/102818021082583645551https://plus.google.com/102818021082583645551https://plus.google.com/102818021082583645551https://plus.google.com/116493297166189701407http://creativecommons.org/licenses/by-sa/3.0/deed.en_UShttp://creativecommons.org/licenses/by-sa/3.0/deed.en_US
  • 7/27/2019 Intro a Programacao Android Edicao 1

    3/101

    Dito isto, pedimos a compreenso do leitor sobre o facto de que este livro se encontra

    incompleto. Os primeiros 4 captulos sendo os essenciais encontram-se maioriatariemente

    completos. Os captulos 5 e 7 no se encontram completos nem revistos pelo que optamos

    pela sua excluso. No entanto no existe relao directa entre captulos a partir do 4 cap.

    pelo que o leitor poder tirar partido dos mesmo sem recear quebras de maior na linha de

    aprendizagem.

    Imagem da capa de autoria de Sara Lima.

    Futuro e Donativos

    Esta a 1 verso que tornamos disponvel ao pblico. Dependendo da recepo da

    mesma, da futura disponibilidade dos autores e/ou eventuais contribuies externas

    podero existir novas verses deste documento. Para tal consulte apgina que osautores dedicaram a esse propsito no frum androidPT.

    Para ajudar os autores pondere fazer um donativo; consulte a pgina em cima para ver o

    impacto dos donativos.

    De momento os autores aceitam donativos na forma deBitcoinpara o seguinte endereo:

    1GcxrHzcRGnxjYB4Liz1GbpiYaFTw9je3v

    QR Code do end ereo Bitc oint apr esentado em cim a

    http://www.androidpt.com/index.php?/topic/44171-livro-livre-de-introducao-a-programa%C3%A7%C3%A3o-android/http://www.androidpt.com/index.php?/topic/44171-livro-livre-de-introducao-a-programa%C3%A7%C3%A3o-android/http://www.androidpt.com/index.php?/topic/44171-livro-livre-de-introducao-a-programa%C3%A7%C3%A3o-android/http://www.androidpt.com/index.php?/topic/44171-livro-livre-de-introducao-a-programa%C3%A7%C3%A3o-android/http://bitcoin.org/en/http://bitcoin.org/en/http://bitcoin.org/en/http://bitcoin.org/en/http://www.androidpt.com/index.php?/topic/44171-livro-livre-de-introducao-a-programa%C3%A7%C3%A3o-android/http://www.androidpt.com/index.php?/topic/44171-livro-livre-de-introducao-a-programa%C3%A7%C3%A3o-android/
  • 7/27/2019 Intro a Programacao Android Edicao 1

    4/101

  • 7/27/2019 Intro a Programacao Android Edicao 1

    5/101

    ndiceSobre .................................................................................................................................... 2

    Autoria .............................................................................................................................. 2Futuro e Donativos ............................................................................................................ 3

    Introduo plataforma Android .......................................................................................... 8As Origens ........................................................................................................................ 8Viso sucinta das vrias verses de Android .................................................................... 10

    a. Android 1.0 ........................................................................................................... 10b. Android 1.1 ........................................................................................................... 10c. Android 1.5 ........................................................................................................... 10d. Android 1.6 ........................................................................................................... 11e. Android 2.0, 2.0.1, 2.1 .......................................................................................... 12f. Android 2.2 ........................................................................................................... 13g. Android 2.3, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.3.6, 2.3.7 ..................................... 14h. Android 3.0, 3.1 e 3.2 ............................................................................................ 16i. Android 4.0 ........................................................................................................... 18

    j. Android 4.1 ........................................................................................................... 19O que e o que no ..................................................................................................... 20Componentes Base .......................................................................................................... 21Fragmentao ................................................................................................................. 22Instalao do eclipse ....................................................................................................... 23Instalao do ADT ........................................................................................................... 24Configurao do SDK....................................................................................................... 27IntelliJ IDEA ..................................................................................................................... 27MOTODEV Studio ............................................................................................................. 282.6 Android Studio .......................................................................................................... 28

  • 7/27/2019 Intro a Programacao Android Edicao 1

    6/101

    Android Debug Bridge ..................................................................................................... 30DDMS .............................................................................................................................. 31Emulador ......................................................................................................................... 32Outras ferramentas ......................................................................................................... 34

    k. Draw 9-patch ......................................................................................................... 34l. Hierarchy Viewer .................................................................................................... 34m. Monkey ............................................................................................................... 35n. ProGuard ............................................................................................................... 35o. Zipalign ................................................................................................................. 35p. Outros ................................................................................................................... 35

    Desenvolver para plataformas mveis .............................................................................. 36Componentes aplicacionais de Android ........................................................................... 37

    q. Activity .................................................................................................................. 38r. Service ................................................................................................................... 38s. Broadcast Receiver ................................................................................................. 38t. Content Provider .................................................................................................... 38

    Ciclo de vida de uma Activity ........................................................................................... 39

    Gesto de recursos .......................................................................................................... 41Android Manifest ............................................................................................................. 45

    u. Uses-permission .................................................................................................... 46v. Permission ............................................................................................................. 46w. Uses-sdk ............................................................................................................. 47x. Uses-configuration ................................................................................................. 48y. Uses-feature........................................................................................................... 48z. Supports-screens ................................................................................................... 49aa. Application ......................................................................................................... 49

    Classe application ........................................................................................................... 50O que so views .............................................................................................................. 53

  • 7/27/2019 Intro a Programacao Android Edicao 1

    7/101

    Layouts ........................................................................................................................... 54Menus ............................................................................................................................. 63Caixas de Dilogo ........................................................................................................... 71

    bb. AlertDialog ......................................................................................................... 73cc. Progressdialog .................................................................................................... 78dd. CustomDialog ..................................................................................................... 80

    Toasts e Notificaes ...................................................................................................... 82Intents O que so e como utilizar ................................................................................. 87Usar Intents de Sistema ................................................................................................... 89Mais sobre Actions .......................................................................................................... 90Intent Extras .................................................................................................................... 90Notas Finais sobre Intents ............................................................................................... 93Modelo De Segurana Aplicacional .................................................................................. 94Permisses e Descrio ................................................................................................... 95Assinar uma aplicao com um Certificado Digital ........................................................... 98

  • 7/27/2019 Intro a Programacao Android Edicao 1

    8/101

    111 Introduo plataforma AndroidNeste primeiro captulo iremos falar um pouco da histria de como tudo comeou e o porqu

    da importncia do programador perceber sucintamente a evoluo da plataforma.

    As Origens

    As origens primordiais da plataforma Android remetem para o ano de 2003. Nessa altura o

    conceito de smartphone era muito diferente do atual, o Symbian e o Windows CE eram as escolhas

    de eleio para qualquer fabricante que quisesse produzir dispositivos que encaixassem neste

    conceito de equipamento mvel. Inicialmente a plataforma foi desenvolvida pela Android Inc.,

    sendo que aps 22 messes de existncia, em Agosto de 2005 a Google compra esta empresa e

    fica com todos os direitos de desenvolvimento da plataforma. A liderar esta empresa, e sendo

    tambm co-fundador da Danger Inc. estava um homem de nome Andy Rubin, cuja viso e talento

    demonstrados fizeram que aquando a compra a Google lhe atribusse a chefia da sua diviso

    mvel, posio na qual continua a ocupar at data presente.

    Em 2003 Andy Rubin falou de 2 pontos que viriam a ser fundamentais na estipulao das

    bases da plataforma: dispositivos que tirem proveito da localizao do utilizador para lhe oferecer

    informao de qualidade e agregao de informao de vrias tipos para melhor servir

    consumidores mais tecnologicamente informados.

    Desde essa data a Google tinha iniciado ento o desenvolvimento do Android, no entanto em

    Janeiro de 2007 um evento particular mudou a realidade do mercado radicalment1e, o

    aparecimento do primeiro iPhone. O iPhone e a genialidade de marketing da Apple trouxeram

    consigo uma mudana fundamental de mercado, fizeram com que o pblico em geral visse osSmarthphones como uma necessidade, sendo que at ento este tipo de dispositivos era quase

    que exclusivamente usados no contexto empresarial ou por pessoas com gosto por gadgets.

    1

  • 7/27/2019 Intro a Programacao Android Edicao 1

    9/101

    No entanto sua filosofia tal como tudo na Apple segue uma forma de controlo nica e

    centralizada, querendo isto dizer que s a Apple escolhe que fabricantes fabricam as peas do

    iPhone, s eles podem construir dispositivos com o seu sistema operativo, e aquando do

    aparecimento do mesmo outras limitaes existiam como o facto de s uma operadora nos

    Estados Unidos poder comercializar o mesmo. Ora, a Google no encarou isto como um desafio,

    mas sim como uma oportunidade. Qualquer limitao que um sistema concorrente tenha uma

    vantagem para um que no tenha essas mesmas limitaes. fcil de conceber a ideia de que

    com tantos fabricantes existentes no mercado global esta viso monopolista em que s 1

    fabricante e 1 operador mvel podem oferecer algo deste teor e qualidade aos consumidores no

    vai de encontro aos seus planos de perdurar no mercado, sendo que algo teria de ser feito para

    acompanhar a nova varivel de mercado. Desta forma, em Novembro de 2007 a Google

    juntamente com 34 outros membros fundam a Open Handset Alliance (geralmente chamada

    pelo acrnimo OHA), com um objetivo muito claro: criar uma plataforma livre que permita

    qualquer fabricante/operadora produzir dispositivos e servios com capacidades avanadas numequipamento mvel, criando uma base uniforme e sobre standards da indstria que permitam a

    todos fabricar dispositivos que interajam bem com qualquer outro dispositivo independentemente

    da marca, modelo ou fabricante. A OHA tomou o Android, que foi ento liberadi livremente pela

    Google, como base para o seu desenvolvimento sendo que todos os membros da OHA contribuem

    para a gesto e melhoria da plataforma. Entre os membros fundadores esto, para alm da

    prpria Google, a HTC, Samsung Electronics, LG, Motorola, Sony, Texas Instruments, Marvell

    Technology, Nvidia Corporation, Intel Corporation, Qualcomm, Synaptics, entre outros grandes

    nomes da indstria. por isso que em qualquer dispositivo Android existente em comercializaohoje em dia, o cdigo fonte que deu origem a esse equipamento tem contribuies de todas essas

    marcas e mais algumas, sendo que presentemente a OHA conta com mais de 80 membros.

    Finalmente, a revoluo comea a ser aparente quando a 12 de Novembro de 2007 uma verso

    beta da SDK de Android lanada ao pblico, tendo-se tornado possvel a partir desse momento

    comear a aprender a programar para a mesma. No entanto o primeiro dispositivo comercial a ser

    lanado com Android s veria a luz do dia no ano seguinte, em Setembro de 20082.

    2 Lanamento do HTC Dream, tambm conhecido por HTC G1.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    10/101

    Viso sucinta das vrias verses de Android

    De modo a que o leitor compreenda de que funcionalidades de sistema pode usufruir,

    importante perceber quando que estas foram introduzidas na histria da plataforma Android. S

    desse modo consegue garantir agilmente qual a verso mnima de Android que a sua aplicao

    dever suportar. Nos captulos seguintes o leitor descobrir como possvel manter

    compatibilidade com dispositivos que possuem verses de Android mais antigas e que no

    possuem APIs necessrias de modo a usufruir de uma funcionalidade concreta mas no vital da

    sua aplicao, e como dinamizar e gerir todo esse processo. Para j, convidamos-lo a dar uma

    vista de olhos pelas verses existentes de Android, sendo que nem este texto compreende toda a

    informao necessria, nem o leitor precisar em instncia alguma de saber de cr esta

    informao. A mesma aqui apresentada como convenincia para quando se deparar com a

    necessidade de averiguar diferenas entre verses de Android.

    a. Android 1.0Nome de cdigo: Android

    Esta verso de Android foi distribuda aquando do incio da venda do HTC G1, o primeiro

    smartphone comercial com Android. A sua data de disponibilidade para o pblico portanto

    coincidente com a comercializao efetiva do dispositivo que teve lugar em Outubro de 2008.

    b. Android 1.1Nome de cdigo: Bender

    Esta verso foi lanada como uma atualizao para o G1 a 9 de Fevereiro de 2009, embora

    poucos detalhes. Entre outras, trouxe a possibilidade de referenciao de bibliotecas externas no

    Manifest de Android, muitas correes sendo a maioria relativa ao cliente de correio electrnico e

    foi adicionado o suporte inicial para testes de JUnit nicos a Android.

    c. Android 1.5Nome de cdigo: Cupcake

  • 7/27/2019 Intro a Programacao Android Edicao 1

    11/101

    A verso Cupcake pode ser considerada um major release3, apesar da numerao parecer indicar

    o contrrio. Foi lanada em Abril de 2009, e teve 4 revises4 desde ento.

    Entre as novidades destacam-se os seguintes pontos:

    Gravao de Vdeo Upload de contedo para o Youtube e Picasa diretamente do dispositivo Novo teclado no ecr, com previso de texto Suporte para Bluetooth AD2P e suporte para AVRCP Novos widgets e pastas para popular o ambiente de trabalho Transies animadas Suporte extensivo para localizao de lngua de sistema, at aqui s existia Ingls e Alemo, sendo

    que passaram a ser suportadas mais de 20 lnguas oficialmente

    Suporte para dispositivos de densidades diferentes Muitas APIs melhoradas desde geo-localizao, mtodos de introduo, e framework visual

    A ttulo de curiosidade, a partir desta verso os nomes de cdigo das verses de Android passaram aser baseados de doces de culinria para alm da primeira letra seguir a ordem crescente do alfabeto.

    d.Android 1.6

    Nome de cdigo: Donut

    A verso Donut constituiu uma minor release5, sendo que o seu foco principal foi a uniformizao

    e re-estruturao de algumas partes da framework visual, assim como correo de falhas

    presentes na verso anterior. Foi lanado em Setembro de 2009 e teve 3 revises desde ento.

    3 Major Release: lanamento que constitui um aumento e alterao significativa da API face

    existente

    4 Uma reviso (revision) constitui correes a uma API existente, geralmente de teor de

    segurana ou estabilidade. Numa reviso a API manten-se a mesma do ponto de vista do

    programador.

    5 Minor Release: em contraste com a Major Release, uma minor release no constitui uma

    mudana significativa da API

  • 7/27/2019 Intro a Programacao Android Edicao 1

    12/101

    Entre as novidades destacam-se os seguintes pontos:

    Android Market melhorado Aplicao da cmara e galeria melhoradas

    Introduo da procura por voz Suporte para CDMA/EVDO, 802.1x, VPNs e motor de texto-para-voz (TTS - Text-To-Speech) Suporte para ecrs com resoluo WVGA Melhorias de performance na cmara e aplicao de procura Suporte para Gestos no Ecr

    e. Android 2.0, 2.0.1, 2.1Nome de cdigo: Eclair

    A verso Eclair de Android foi uma major release, e a sua numerao foi um pouco confusa. O

    lanamento inicial foi em Outubro de 2009, sendo que s 1 dispositivo Android chegou

    oficialmente a ter esta verso do Eclair, o Motorola Droid, na altura a verso 2.0 do mesmo. A

    razo pela qual houveram outras verses Eclair prende-se com o produo do Nexus One, um

    dispositivo que iria ser comercializado pela Google e o qual j estava em desenvolvimento

    internamente na altura que o Motorola Droid foi lanado. Assim em Janeiro de 2010 surge o

    Nexus One que trouxe consigo a verso 2.1 do Eclair. Entre estas duas datas existiu ainda uma

    outra verso, a 2.0.1, que foi uma atualizao para o Motorola Droid, sendo que teve pouca

    relevncia no panorama global. J o mesmo no se pode dizer do Nexus One, cujo objetivo

    principal do telemvel no era tanto ser um sucesso de vendas mas sim elevar o patamar e criar

    um telemvel modelo sobre os quais os fabricantes se deveriam apoiar quando

    conceptualizassem novos dispositivos Android, e a verdade que funcionou pois vejam-se que

    at dispositivos de baixo custo como o Sapo A5 tm uma semelhana caracterstica com o NexusOne, tanto a nvel de design como de funcionalidades base. Um dos outros objetivos do Nexus

    One foi construir um telemvel moderno que oferecesse uma base slida para quem quiser ter

    um telemvel de desenvolvimento em Android, sendo que com isto ficou a promessa que este

    dispositivo seria atualizado pelo menos durante 2 anos com as ltimas verses de Android.

    Entre as novidades introduzidas pela verso Eclair destacam-se os seguintes pontos:

  • 7/27/2019 Intro a Programacao Android Edicao 1

    13/101

    Otimizaes de performance do hardware Suporte para mais resolues e densidades Interface visual renovada Novo Browser com suporte para HTML5 Nova lista de contactos Melhor rcio de contraste Google Maps melhorado Suporte oficial para Microsoft Exchange Suporte para flash da cmara fotogrfica Zoom Digital Suporte para Multi-Toque Teclado virtual melhorado Suporte para Bluetooth 2.1 e outras melhorias na stack de Bluetooth Live Wallpapers (panos de fundo animados) O browser embebido em aplicaes passa a ter uma gesto de recursos separada do browser do

    telemvel

    Suporte para Ant Suporte para Virtual Android Keys ou seja, os botes nativos de Android tais como Home ou

    Search passam a poder ser emulados virtualmente ao invs de serem apenas referenciados pelatecla fsica

    f. Android 2.2Nome de cdigo: Froyo

    Esta verso foi uma das principais novidades do evento Google I/O de 2010, mais concretamente

    a 20 de Maio. Nesta altura o Android tinha j conquistado uma posio relevante no cenrio

    global de smartphones e o mundo estava de olhos postos nas novidades que iriam ser anunciadas

    pela Google no evento. Apesar da Google ter assinalado esta como uma minor release a mesma

    contem uma panplia de novidades no menos importantes:

    Melhoria de performance geral, com introduo de JIT (Just-In-Time compiler)

  • 7/27/2019 Intro a Programacao Android Edicao 1

    14/101

  • 7/27/2019 Intro a Programacao Android Edicao 1

    15/101

    Suporte para o formato de vdeo WebM Copiar-Colar melhorado Suporte para resoluo 1366768 Px Introduzido novo look para Android Market Goggle Maps atualizado, contendo a nova funcionalidade de visualizar uma camada

    unicolor de Edifcios 3D sobre o mapa

    Novo tema visual, com fundos a preto e elementos visuais em tons de verde Suporte para Near-Field Communication (leitor NFC) Suporte nativo para cmara frontal

    Suporte para protocolo SIP Motor de Garbage Collect redesenhado, agora mais rpido Drivers grficos atualizados, com melhor performance para OpenGL ES (incluindo

    tambm uma interface para Khronos EGL )

    Suporte para o sensor Giroscpio Vrias bibliotecas internas atualizadas, e aperfeioamentos ao Just In Time Compiler

    (JIT).

    As verses 2.3.1, 2.3.2 e 2.3.5, 2.3.6 e 2.3.7 so tidas como revises, e portanto no obtiveram

    uma verso de API diferente ou alteraes de SDK relevantes.

    A verso 2.3.3 foi lanada a 9 de Fevereiro de 2011 e foi considerada uma minor release pois

    adicionou algumas coisas funcionalidade que requeriam alteraes na API tais como suporte

    para mais normas de NFC (near-field-communication) entre outras pequenas melhorias a nvel

    multimdia.

    A verso 2.3.4 foi lanada a 4 de Maio de 2011. Como habitualmente neste ms esta verso trata-

    se da extenso de funcionalidades que foi apresentada no Google I/O de 2011, tento trazido

    essencialmente pequenas correes e suporte a dispositivos USB (funcionalidade conhecida

    como USB Host). Esta funcionalidade permite a comunicao com dispositivos USB, tais como PEN

    drives, Joysticks, teclados e ratos USB, etc, e com isto foi tambm introduzido o Android ADK

  • 7/27/2019 Intro a Programacao Android Edicao 1

    16/101

    (Accessory Development Kit) que permite tirar partido desta funcionalidade e extender o seu uso

    para novos tipos de perifricos.

    h. Android 3.0, 3.1 e 3.2

    Nome de cdigo: Honeycomb

    Esta verso de Android exclusiva a Tablets!

    Com o lanamento da verso Honeycomb a plataforma encontrou-se dividida em 2 partes

    fundamentais, a verso de Android para Smartphones e a verso para Tablets. Patente a esta

    fragmentao est o trabalho tardio do conceito de tablet como um dos focos da plataforma, e

    quando finalmente se pretendeu fazer uma verso de Android para este novo formato os

    programadores da plataforma foram deparados com um conceito muito diferente de dispositivo

    que no enquadrava bem na mesma filosofia e parmetros que os smartphones. No entanto a

    plataforma est construda de forma que uma aplicao possa, mediante algumas alteraes e

    cuidados no desenvolvimento de aplicaes, tornar possvel a mesma aplicao executar tanto

    numa como noutra, este dinamismo e como lidar com o mesmo ser explicado neste livrotambm. Para j fica a referncia de que esta divergncia da plataforma foi dissimilidada com o

    aparecimento da iterao seguinte da plataforma, pelo que as diferenas de programao para

    Smartphones e Tablets tendero a diminuar com o passar do tempo.

    O Honeycomb 3.0 surge com a apresentao do Motorola Xoom a Fevereiro de 2011. Entre as

    principais novidades destacam-se as seguintes:

    Interface grfica redesenhada com tablets em mente. Inmeras mudanas visuais, desdeincluso da System Bar, Action Bar de aplicaes persistente, nova aplicao de Launcher,

    etc

    Nova vista de aplicaes recentes Teclado virtual melhorado (agora suporta atalhos com a tecla CTRL, etc)

  • 7/27/2019 Intro a Programacao Android Edicao 1

    17/101

    Aplicaes atualizadas: Browser de Internet, Contactos, Cmara, Galeria, Email Acesso nativo s funcionalidades de acelerao por Hardware para grficos 3D e 2D Suporte para processadores de mltiplos ncleos Suporte para a framework 3D Renderscript Suporte nativo para Live Streaming HTTP (formato m3u) Suporte para framework de Digital Rights Management (DRM) Suporte para Media/Picture Transfer Protocol (MTP/PTP) sobre ligao USB Suporte para Bluetooth A2DP e perfis de HSP Suporte para Drag & Drop de elementos visuais Melhoramentos e novas funcionalidades de animao nativas Suporte para Fake Touch Suporte para conversao de vdeo no Google Talk

    Em pleno Google I/O de 2011, mais concretamente a 10 de Maio de 2011 anunciada

    oficialmente a verso 3.1 de Honeycomb, sendo que se trata de uma minor release, e apresenta

    as seguintes novidades:

    Suporte nativo para USB ( USB Host ) Suporte para MTP (Media-Transfer-Protocol) e PTP (Picture-Transfer-Protocol) Suporte para RTP (Real-time Transport Protocol), um protocolo de streaming de contedos

    muito utilizado

    Widgets de tamanho varivel (embora j existissem solues no Android Market paracumprir este objetivo, o suporte no era nativo)

    Melhorias e novidades nas frameworks de Animao e Interface de Utilizador em geral Wi-Fi Lock - Aplicaes podem escolher que o Wi-Fi no entre em modo de hibernao

    quando o dispositivo fica em modo adormecido (tipicamente ao desligar o ecr), til para

    manter ligao ativa numa comunicao SIP por exemplo

    Suporte para udio FLAC e raw ADTS AAC Suporte para a tag de de HTML5 e outras melhorias no Browser

  • 7/27/2019 Intro a Programacao Android Edicao 1

    18/101

    Tal como referido anteriormente para a verso 2.3.4 de Gingerbread, tambm a verso 3.1

    suporta a nova ADK de Android.

    AJulho de 2011 apresentada a verso 3.2 de Honeycomb, que fica marcada pela correes de

    falhas e pela introduo de algumas novas funcionalidades, entre quais se destacam as seguintes:

    Suporte para novo hardware, de modo a suportar novos tipos de tablets Introduzido modo de Zoom de compatibilidade, de modo a que mais aplicaes que foram

    feitas para telemvel sejam possveis de executar no tablet

    Sincronismo de media a nvel do carto SD - dispositivos com suporte a cartes SD passama suportar carregamento direto de ficheiros de media a partir do carto

    Re-Introduo do suporte para montar cartes SD tinha sido removido no 3.0) Adicionado suporte nativo para desenvolvimento para resolues de TV (por exemplo:

    720p)

    Suporte para redes HSPAP

    i. Android 4.0

    Nome de cdigo: Ice-Cream Sandwich

    A verso Ice-Cream Sandwich foi lanada a 19 de Outubro de 2011, e trouxe a to aguardada

    unio de tablets com smartphones em Android, contituindo assim um patamar importante na

    uniformizao e reduo de fragmentao da plataforma. A verso 4.0 de Android uma major

    release, e conta com as seguintes novidades:

    Novo launcher e app drawer Introduo formal do padro de desenho (design pattern): Action Bar de aplicao Widgets redimensionveis

  • 7/27/2019 Intro a Programacao Android Edicao 1

    19/101

    Novo ecr de bloqueio, com novas opes Possibilidade de ter Suporte para Fake Touch (j presente tambm em Honeycomb) Novo teclado virtual, com melhorias de layout e vrias melhorias a nvel de deteco

    de erros ortogrficos

    Melhorias no sistema de reconhecimento de voz Visualizao e gesto de fluxo de dados de rede das aplicaes instaladas Aplicao dedicada integrao com Redes Sociais Novo calendrio, e melhorias na disponibilizao de servios de calendrio a outras

    aplicales de sistema

    Edio de fotos a partir da galeria Nova aplicao de cmara Reconhecimento de face, e elementos faciais Suporte para Wi-Fi direct e Bluetooth HDP (possibilidade de integrao com qualquer

    dispositivo certificado pela Continua)

    Partilha de dados por NFC (Android Beam) Novas APIs de ligaes VPN

    j. Android 4.1

    Nome de cdigo: JellyBean

    Interface mais fluda e com melhor tempo de resposta (adicionados VSync e TripleBuffering)

    Adicionadas novas funcionalidades e API de Acessibilidade Suporte para Texto Bi-Direcional

  • 7/27/2019 Intro a Programacao Android Edicao 1

    20/101

    Suporte para instalao de Keymaps para suportar teclados externos Notificaes expansveis e agrupveis Widgets auto-ajustveis Fotos de contactos em alta resoluo Controlo de hardware de vibrao de dispositivos conectados (Rumble Pak, etc) Multicast DNS Discovery e melhorado Wi-Fi Direct API para aceder listagem de low-level codecs Suporte para udio por USB Suporte para udio multi-canal at 5.1 AAC Reencaminhamento de udio, Media Router e Audio Chainning adicionados Melhoramentos de performance de Renderscript e novo suporte para texturas Motor V8 e WebView atualizados para melhorar performance e permitir captura de media

    de HTML5 e deteo correta de field-type

    Introduzido Google Cloud Messaging (GCM) para envio de mensagens pequenas emmulticast

    Encriptao de aplicaes pagas Atualizao inteligente de aplicaes - apenas as componentes novas das aplicaes so

    transferidas nas atualizaes e no a aplicao nova na totalidade

    Melhor integrao de servios do Google+

    O que e o que no

    Existe alguma confuso por parte de alguns programadores, e mesmo utilizadores, do que

    realmente a plataforma Android. Uma das principais confuses em relao linguagem de

    programao da plataforma. Realmente a linguagem usada para programar para Android Java,

    mas Android no baseado na plataforma Java ME. Como tal, no possvel correr aplicaes

    Java compiladas para Java ME (como o caso de algumas aplicaes para terminais Nokia) em

  • 7/27/2019 Intro a Programacao Android Edicao 1

    21/101

    Android. Isto porque a mquina virtual de Java que executa o cdigo em Android a Dalvik VM,

    que uma VM6 otimizada para terminais mveis.

    Android tambm no simplesmente uma camada aplicacional, sendo que define muito mais que

    isso. Quando se fala em Android como plataforma, estamos a falar desde o Kernel que corre no

    dispositivo (Linux), at s Aplicaes em si passando por bibliotecas nativas, bibliotecas da API, e

    como bvio, a camada Aplicacional e de Servios fornecidos pela plataforma aosprogramadores.

    Outra grande confuso, se o Android um telemvel. Para alm de todo o software que a

    plataforma Android define, tambm faz parte da plataforma um design de referncia para os

    fabricantes de terminais se basearem para o desenvolvimento dum novo terminal, mas no h

    uma rigidez nos componentes que tm de ser aplicados nesses terminais. Por isso, a plataforma

    possibilita aos fabricantes a utilizao da plataforma Android em vrios tipos de terminais, desde

    terminais de gama baixa at aos topo de gama da marca, sendo que Android pode ser utilizado

    at em equipamentos que no dispe de uma utilizao para tele-comunicaes como em

    eletrodomsticos inteligentes, etc.

    Componentes Base

    A componente mais importante de toda a plataforma, provavelmente a Dalvik VM. Esta mquina

    virtual a responsvel pela execuo de todo o cdigo Java que faz parte da plataforma Android.

    Foi criada por um programador da Google (Dan Bornstein) com o intuito de ser base da

    plataforma. tambm bastante diferente das Java VMs que so usadas normalmente noutros

    sistemas operativos pois esta est especialmente otimizada para que os programas possam ser

    interpretados duma forma rpida e eficaz e ao mesmo tempo usando pouca memria.

    Como j deve ser do seu conhecimento, o Kernel usado pela plataforma o Kernel Linux. Este

    conta com algumas alteraes para que todo o software possa executar sem problemas. Algumas

    destas alteraes includas no Kernel so:

    Android Debug Bridge (adb): Usado para aceder ao terminal via USB ou TCP/IP e poderobter informaes de sistema como logs, aceder shell do terminal, enviar e receber

    ficheiros, etc.

    6 Mquina Virtual

  • 7/27/2019 Intro a Programacao Android Edicao 1

    22/101

    Low Memory Killer: Componente do Kernel que gere a memria do terminal. este ocomponente responsvel por terminar aplicaes quando o terminal precisa de memria

    livre para executar alguma coisa.

    IPC Binder: Esta parte do Kernel responsvel por uma parte muito importante daplataforma. Quando as aplicaes precisam de falar entre si, por vezes podem precisar de

    algo mais completo que uma simples chamada de um Intent (mais frente veremos o que). Para isto existe este servio que possibilita os programadores falarem diretamente

    com outras aplicaes instaladas.

    Numa arquitetura Linux, precisamos de algo que ligue o Kernel s aplicaes. A esta biblioteca

    chamamos LibCe a mais usada nas tecnologias de informao a GNU LibC. Na plataforma

    Android no entanto, esta biblioteca foi substituda pela BIONIC C Library. A BIONIC C uma

    verso muito reduzida e otimizada, com partes da biblioteca C de *BSD e partes da GNU LibC paraLinux, e ainda funcionalidades que lhe so nicas. Muitas coisas foram alteradas e reduzidas de

    forma a que todos os pedidos ao Kernel sejam feitos o mais rpido possvel e sem haver uma

    preocupao com otimizaes especficas. Muitas otimizaes utilizadas na LibC de Linux por

    exemplo, seriam demasiado pesadas para serem executadas em terminais com pouca memria e

    com escassos recursos de processamento, logo o seu custo/benefcio seria nulo.

    Fragmentao

    A fragmentao um problema criado pela plataforma devido a ser bastante malevel, e

    portanto poder adaptar-se quase a qualquer tipo de terminal. Acontece que muitas vezes os

    fabricantes e/ou as operadoras lanam terminais para o mercado que depois acabam por no lhes

    dar suporte a nvel de atualizaes do Sistema Operativo, mesmo aps a Google disponibilizar

    novas verses da plataforma. Com isto cria-se uma dor de cabea para os programadores porque

    se quiserem suportar o mximo de terminais possveis para a sua aplicao tm de ter em conta

    vrios aspetos para no quebrarem a compatibilidade com os terminais mais antigos. Assim

    temos por exemplo aplicaes que suportam APIs desde a verso 1.5 at verso mais atual deAndroid mas que recorrem a vrios truques para que isto seja possvel. Num captulo mais

    frente este assunto ser abordado novamente numa perspetiva de perceber o que um

    programador pode fazer para resolver e lidar com este problema.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    23/101

    2221CCOOMMOO CCOONNFFIIGGUURRAARR OO

    AAMMBBIIEENNTTEE DDEE

    DDEESSEENNVVOOLLVVIIMMEENNTTOO

    Como plataforma e ambiente de desenvolvimento para Android, a Google adotou o ambiente

    Eclipse, desenvolvendo um plugin chamado Android Developer Tools Plugin for Eclipse (ADT).Neste captulo vai ver como instalar e configurar corretamente o Eclipse para desenvolvimento para

    a plataforma Android, sendo que as introes aqui presentes cobrem os 3 sistemas operativos mais

    usados, Windows, Linux e MacOS X.

    Instalao do eclipse

    O 1 passo caso esteja num ambiente Windows ou MacOS X, ir ao website oficial do Eclipse7 e

    fazer a transferncia da ltima verso disponvel para programao em Java (com o ttulo Eclipse

    IDE for Java Developers, tal como ilustrado na figura 2.1). Ter em ateno a verso do sistema

    operativo, se 32bits ou 64bits e fazer download da verso apropriada. No caso de estar a usar

    Linux, pode tambm utilizar o mtodo anteriormente descrito para Windows/MacOS X, ou ento

    usar o sistema de instalao de aplicaes da sua distribuio (apt-get, emerge, yum, rug, etc).

    FFIIGGUURRAA22..1Transferncia do Eclipse para Java

    7 http://www.eclipse.org

  • 7/27/2019 Intro a Programacao Android Edicao 1

    24/101

    Aps a transferncia ter concludo, basta descomprimir o ficheiro que guardou para a aplicao

    ficar pronta a usar. Pode faz-lo por exemplo para o seu Ambiente de Trabalho. Aps isto feito,

    pode abrir o Eclipse pela 1 vez. Neste altura ser-lhe- tambm perguntado onde fica definido o

    seu workspace8.

    Instalao do ADT

    Com o Eclipse aberto, selecione o menu Helpe em seguida escolha a opo Install New Software.

    Ser-lhe- apresentada uma janela semelhante da figura 2.2 .

    FFIIGGUURRAA22..22Janela de instalao de plugins do Eclipse

    Na janela apresentada dever ento pressionar o boto Addpara adicionar um repositrio. Na

    caixa de dialogo que ir aparecer preencha o campo Name com ADTe o campo Location com o

    valor https://dl-ssl.google.com/android/eclipse/, tal como evidenciado pela figura 2.3.

    8 Workspace o local onde os projectos do eclipse ficam guardados. Este mecanismo

    prtico pois permite por exemplo ter vrios workspaces se estiver a trabalhar em diferentes

    contextos, e dessa forma agrupar e separar o trabalho convenientemente.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    25/101

    FFIIGGUURRAA22..33Adicionar o repositrio do plugin de Android

    O Eclipse ir ento procurar no novo repositrio inserido os plugins disponveis para serem

    instalados. Quando terminar iro estar disponveis novas opes para instalao dentro do grupo

    Developer Toolstal como est na figura 2.4. Pode simplesmente selecionar todas e clicar em Next.

    FFIIGGUURRAA22..44Componentes do plugin de Android

    Na fase seguinte o Eclipse apenas nos diz que software ns escolhemos para instalao e se tudo

    est conforme para a executar. Basta pressionar o boto Nextnovamente para passarmos fase

  • 7/27/2019 Intro a Programacao Android Edicao 1

    26/101

    onde lhe dada a conhecer as licenas dos Plugins que vai instalar no Eclipse. No fim de aceitar

    as licenas, s tem de pressionar o boto Finish e a instalao iniciar-se-.

    Durante a instalao, vai-lhe aparecer um aviso acerca de contedo que vai ser instalado mas que

    no est assinado digitalmente, semelhante ao que apresentado na figura 2.5. Este aviso

    normal nesta instalao.

    FFIIGGUURRAA22..55Aviso de assinaturas digitais

    No final da instalao vai-lhe ser pedido para reiniciar o Eclipse para aplicar as alteraes

    efetuadas pela instalao do Plugin. Clique ento em reiniciar. Aps o Eclipse iniciar novamente,

    veremos que o ADT j est instalado, visto que lhe dever ser mostrada uma janela a pedir para

    fazermos a transferncia da SDK9 para desenvolver em Android.

    Nesta altura selecione as duas opes disponveis debaixo da opo Install new SDKe escolha o

    local onde quer guardar toda a SDK, tal como evidenciado na figura 2.6. Finalmente, apenas

    necessita de pressionar Finish.

    FFIIGGUURRAA22..66Transferncia da SDK de Android

    Mais uma vez, o Eclipse vai analisar o que necessrio instalar e mostra-nos essa informao. De

    notar que esta instalao j o prprio ADT a fazer e no o Eclipse visto estarmos a instalar

    verses da SDK de Android que nada tm a ver com o Eclipse em si. A esta altura apenas

    necessita de aceitar todas as e carregar em Install.

    9 Sofware Development Kit

  • 7/27/2019 Intro a Programacao Android Edicao 1

    27/101

    A partir deste momento, tem o ambiente de desenvolvimento completamente preparado para

    comear a desenvolver aplicaes Android usando o Eclipse.

    Configurao do SDK

    Dentro da aplicao de configurao do SDK Android, que pode ser aberta clicando no boto que

    se encontra na barra superior do Eclipse (ver figura 2.7). Esta aplicao do SDK serve para instalar

    vrias verses da API de Android, fazer atualizaes quando saem novas verses e tambm

    instalar outros componentes no obrigatrios do SDK.

    FFIIGGUURRAA22..77Iniciar o SDK Manager

    Ao abrir o configurador do SDK, este tentar automaticamente atualizar as verses que tem

    instaladas e instalar mais alguma coisa que lhe seja til para o desenvolvimento. Pode instalar

    ainda documentao de cada API e as APIs da Google (para utilizao do Google Maps, etc). Os

    itens relativos a ARM EABI v7a System Image so as imagens dos emuladores para testar as

    aplicaes no PC de desenvolvimento.

    Sugesto: Instale sempre a documentao, e para o mbito deste livro, instale tambm as Google APIs.

    IntelliJ IDEA

    tambm possvel usar o ItelliJ IDEA como ambiente de desenvolvimento. A ltima verso

    gratuita disponvel no website do IntelliJ 10 j compatvel com o desenvolvimento para Android

    usando a SDK oficial.

    10 http://www.jetbrains.com/idea/

  • 7/27/2019 Intro a Programacao Android Edicao 1

    28/101

    MOTODEV Studio

    O MOTODEV Studio11 um IDE baseada em Eclipse e no plugin ADT que foi referido

    anteriormente, e com o acrscimo de algumas ferramentas extra para auxiliar certas tarefas que

    de outra forma requeriam trabalho manual do programador. Entre estas contam-se ferramentas

    para melhor suporte a localizao de contedos (mesma aplicao em vrias lnguas), gesto

    integrada de bases de dados sqlite, snippetsde cdigo, etc.

    No entraremos em pormenor de como instalar e configurar corretamente o MOTODEV Studio

    visto no ser oficialmente suportado ficando portanto o leitor encarregue de o instalar e

    configurar para desenvolvimento Android caso assim o deseje.

    2.6 Android Studio

    Desde Maio de 2013 que o IDE oficial de Android passou a ser o AndroidStudio. Este IDE no

    mais do que uma verso do IntelliJ IDEA com um conjunto de tecnologias limitado ao espectro

    Android e Google App Engine. Como na altura da escrita deste livro ainda no existia o dito IDE,

    deixamos aqui olink para a pgina do mesmo para que possa descubrir mais.

    11 http://developer.motorola.com/docstools/motodevstudio

    http://developer.android.com/sdk/installing/studio.htmlhttp://developer.android.com/sdk/installing/studio.htmlhttp://developer.android.com/sdk/installing/studio.htmlhttp://developer.android.com/sdk/installing/studio.htmlhttp://developer.android.com/sdk/installing/studio.html
  • 7/27/2019 Intro a Programacao Android Edicao 1

    29/101

  • 7/27/2019 Intro a Programacao Android Edicao 1

    30/101

    3332FFEERRRRAAMMEENNTTAASS DDOO

    3SSDDKK DDEEAANNDDRROOIIDD

    No captulo anterior vimos como podemos configurar o ambiente de desenvolvimento, cujo cenrio

    tpico passa por instalar a SDK de Android e uma IDE (que embora aconselhado no obrigatria para o

    desenvolvimento), mas no entanto a SDK de Android fornece um conjunto muito mais extenso de

    ferramentas para auxiliar o desenvolvimento aplicacional que vai muito para alm de simplesmente permitir

    a compilao do software.

    Android Debug Bridge

    O Android Debug Bridge (ADB) uma aplicao de cliente-servidor que se comparte em 3

    componentes:

    1) Uma aplicao Servidor que corre na mquina de desenvolvimento, qual os dispositivos eemuladores se ligam para intercomunicao

    2) Um Daemon que corre em plano de fundo no dispositivo de testes ou emulador3) Uma aplicao cliente, que corre na mquina de desenvolvimento e permite a interao doprogramador com a componente Servidor que corre tambm ela na mquina de

    desenvolvimento

    Para o programador esta aplicao usada para uma panplia de casos possveis. Esta

    componente usada abstratamente sempre que o vai ao ecr de Debugdo Eclipse para operarcom o DDMS12 por exemplo. A um nvel operacional mais baixo pode tambm usar a ferramenta

    de linha de comandos "adb" que se encontra presente da diretoria/platform-toolsda raiz de

    instalao do SDK. Esta ferramenta de linha de comandos permite iniciar e terminar a componente

    12 Componente do plugin de Android e do SDK, explicado em detalhe mais frente neste

    captulo

  • 7/27/2019 Intro a Programacao Android Edicao 1

    31/101

    de servidor que executa na mquina de desenvolvimento, assim como tirar partido de uma

    instncia deste j em execuo para interao com o dispositivo.

    Tal como o nome sugere, o Android Debug Bridge tem como principal objetivo auxiliar o

    processo de depurao da aplicao. A utilizao mais vulgar e comum feita com recurso

    opo logcat. Esta opo permite ver e filtrar em tempo real toda a informao de depurao que

    emitida pelo terminal. Em Android existe uma class dedicada exclusivamente tarefa dedepurao de nome Log. Sempre que o programador invocar esta class ter de especificar o tipo

    de severidade do registo que vai fazer (Warning, Error, Debug, Verbose, Info, etc) e a tag sobre a

    qual faz esse registo, deste modo ao usar a opo logcat -nos possvel filtrar por aplicao, tag e

    severidade de registo.

    DDMS

    O Dalvik Debug Monitor Bridge (DDMS) a ferramenta visual de depurao que vem juntamente

    com o SDK de Android. O DDMS recai na ligao estabelecida pelo daemon de ADB para abstrair a

    comunicao com o dispositivo (ou instncia de emulador).

    A ferramenta pode ser aberta dentro do Eclipse (mediante instalao prvia do plugin de

    desenvolvimento Android) da seguinte forma: clicar no menu Window na barra de ferramentas, e

    de seguida escolher as opes Open Perspective > Other... > DDMS . A vista resultante ser

    semelhante da figura 3.1. O DDMS pode alternativametne ser executado separadamente doEclipse sendo que se encontra na diretoria toolscom o nome ddms(ou ddms.exe se se tratar do

    sistema operativo Windows).

  • 7/27/2019 Intro a Programacao Android Edicao 1

    32/101

    FFIIGGUURRAA33..2Vista DDMS no Eclipse

    Emulador

    O emulador de Android baseado na tecnologia de cdigo aberto QEMU dado sua versatilidade

    de permitir emular processadores Advanced RISC Machine (ARM) e Intel x86, que por sua vez

    abstrado pelo Android Virtual Device (AVD). Um AVD uma instncia de emulador criada comrecurso ao SDK Manager. A sua criao e manuseamento podem ser feitos tanto por linha de

    comandos ou atravs do editor visual para o efeito (que tambm integra com o plugin de

    Android).

    Dada a diversidade de equipamentos fsicos existentes o AVD uma exelente ferramena para

    combater essa tndencia uma vez que torna possvel criar vrias instncias virtuais que simulam

    equipamentos com caractersticas de hardware distintas. Entre os atributos que so

    parametrizveis contam-se a descriminao do tamanho de ecr, memria RAM disponvel e

    verso do sistema operativo (com ou sem suporte para Google APIs).

    Para criar um AVD atravs do Eclipse, primeiro tem de abrir o gestor de AVDs atravs do boto

    para o efeito (ver figura 3.2).

  • 7/27/2019 Intro a Programacao Android Edicao 1

    33/101

    FFIIGGUURRAA33..22Gestor de AVDs

    De seguida clica no boto New para criar uma nova AVD, e -lhe apresentado um formulrio

    semelhante ao da figura 3.3, o qual como pode ver j preenchemos os campos com uma AVD ao

    nosso gosto. Poder e dever criar tantas AVDs quantas achar necessrias para testar as suas

    aplicaes em condies variadas. Aps criar a instncia de AVD esta ficar disponvel no gestor

    tal como apresentado na figura 3.4.

    FFIIGGUURRAA33..33Formulrio de criao de um AVD

  • 7/27/2019 Intro a Programacao Android Edicao 1

    34/101

    FFIIGGUURRAA33..44Janela de gesto de AVDs existentes

    Se o leitor pretender criar um AVD semelhante ao anterior pela linha de comandos, a sua sintaxe

    seria:

    android create avd -n emulador_ics -t 2 -c 32M

    Onde -n diz respeito ao parmetro do nome, -tao identificador nico da AVD, -cao tamanho do

    carto de memria a criar. Se o leitor quisesse habilitar suporte para Snapshots bastaria passar a

    opo -A.

    Outras ferramentas

    As ferramentas referidas em at agora so de uso comum e genrico seja qual for a escala ou

    contexto (empresarial, didtico, etc) do desenvolvimento que o programador se deparar. No

    entanto existem outras ferramentas de uso especfico que passamos agora a referir.

    k. Draw 9-patchFerramenta para criar e visualizar um tipo de imagem nica a Android, usualmente denominadas

    por imagens 9-patch.

    l. Hierarchy Viewer

  • 7/27/2019 Intro a Programacao Android Edicao 1

    35/101

    Permite visualizar a hierarquia de desenho das Views e Layouts de Android, o leitor perceber

    melhor a utilidade desta ferramenta nos prximos captulos. Esta ferramenta tambm integra com

    o Eclipse.

    m.MonkeyPermite gerar e enviar eventos de input pseudo-aleatrios para o dispositivo, serve

    essencialmente para uma despistagem rpida de eventos relacionadas com a interao do

    utilizador.

    n. ProGuardOtimizao e ofuscao do cdigo gerado por pr-compilao. A ofuscao renomeia Classes,

    parmetros e mtodos.

    o. ZipalignOtimiza o tamanho final do .APK gerado pela compilao atravs da compresso de ficheiros de

    imagem presentes na aplicao.

    p. OutrosPara mais informaes consultar a documentao oficial relativa s ferramentas da SDK Android

    na pgina respetiva13.

    13 http://developer.android.com/guide/developing/tools/index.html

  • 7/27/2019 Intro a Programacao Android Edicao 1

    36/101

    4444FFUUNNDDAAMMEENNTTOOSS

    AAPPLLIICCAACCIIOONNAAIISS

    Neste captulo damos-lhe a conhecer as bases aplicacionais da plataforma. Entender os tpicos que

    iremos falar essencial para que o leitor se sinta vontade com os captulos seguintes e consiga

    capturar a essncia do funcionamento do sistema operativo Android.

    1

    Desenvolver para plataformas mveis

    Quando se trata de desenvolver para Android, ou qualquer plataforma mvel em geral, existem

    certas consideraes que devem ser tidas em conta. Em particular os smartphones actuais so

    mquinas muito capazes e completas que incorporam desde cmara de vdeo a receptor de GPS,

    vrias formas de conectividade, entre outras, mas parte do uso que as aplicaes do a este

    conjunto de capacidades para que exista uma experincia agradvel para o utilizador e bem

    integrada com o sistema.

    O primeiro ponto que vamos falar talvez o mais evidente que se trata da boa gesto de

    recursos do dispositivo. Os terminais mveis pela prpria natureza que tm so dispositivos que

    tm uma bateria cujo consumo pode variar largamente consoante a velocidade de relgio do

    processador, tempo de uso de certas capacidades do hardware (receptores de sinal, sensores, etc)

    e estado de operao, sendo que todas estas variveis so afectadas pelas aplicaes que esto a

    executar no dispositivo a um dado momento.

    Deste modo importante que uma aplicao feita para este tipo de terminais seja o mais eficientepossvel na gesto desses recursos. Uma considerao importante a ter que o Android uma

    plataforma multitarefa14, sendo que a qualquer momento o utilizador pode decidir comutar entra

    14 Multitarefa a capacidade de um sistema operativo executar vrios processos em

    simultaneo

  • 7/27/2019 Intro a Programacao Android Edicao 1

    37/101

    a sua e outra qualquer aplicao ou mesmo premir o boto de energia para colocar o dispositivo

    em standby.

    Um outro ponto importante a capacidade de resposta da aplicao, e este talvez o ponto

    mais habitualmente desprezado por programadores iniciantes plataforma. Por capacidade de

    resposta entende-se que ao disputar uma aco de carcter moroso o dispositivo no fique

    bloqueado durante mais do que meros segundos na aplicao sem o utilizador poder intaragircom o terminal. Neste caso o ideal fazer esse tipo de tarefas num processo no plano de fundo e

    providenciar notificaes ao utilizador para que este tenha a percepo do progresso dessa

    operao, mas ao mesmo tempo poder continuar a interagir com a aplicao em reas que no

    requeiram que o resultado da operao demorada tenha terminado. Por exemplo, se o utilizador

    estiver no Browser, certamente quer poder transitar para uma nova pgina enquanto uma

    transferncia de um ficheiro que foi entretanto iniciada seja efectuada em segundo plano.

    Nas aplicaes mveis, mais do que nas aplicaes de computador pessoal, necessrio ter em

    vista a organizao visual da informao. Como o ecr de um dispositivo mvel pode ser muitas

    vezes inferior em resoluo comparativamente ao ecr de um computador as aplicaes devero

    ser pensadas tendo em conta esse fator. Com uma boa organizao do layout da pgina consegue

    encapsular em pequenas reas muita informao til, mas ateno para no reduzir nem

    compactar a informao em demasia porque seno o utilizador poder ficar confuso pela

    proximidade da mesma, e ao mesmo tempo se no meio dessa informao houverem

    componentes que respondem ao toque no convm que 2 elementos deste tipo estejam

    demasiado prximos porque seno ir causar muitos falsos toques por parte do utilizador.

    As consideraes aqui faladas so de um mbito genrico em Android, sendo que a mais

    discusses de melhores prticas sero expostas ao longo do livro conforme se encaixem no

    contexto do captulo em que se inserem.

    Componentes aplicacionais de Android

    As componentes de uma aplicao so os blocos bsicos de construo da mesma. A SDK de

    Android fornece vrios blocos diferentes, sendo que atravs de cada um destes o sistema

    consegue interagir com sua aplicao. Nem todos estes tm um carter de interaco direta do

    utilizador como poder compreender de seguida.

    Uma aplicao pode ser constituda por vrios destes blocos, e estes blocos so comunicveis

    entre si na maioria dos casos.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    38/101

    q. ActivityUma Activity um ecr da aplicao, o anlogo a uma Janela no Windows (ou Form noutras

    linguagens/sistemas). aqui que habitualmente se produz e elabora a componente de interaco

    visual de uma aplicao.

    r. ServiceUm Service como o nome sugere um servio. No contem um frontendvisual como a Activity, e

    serve geralmente para efectuar tarefas potencialmente demoradas em plano de fundo.

    Geralmente usado como estrutura de suporte s vrias Activities de uma aplicao, tratando de

    coisas como a comunicao com a ligao Internet, atualizaes peridicas de contedos, e

    inter-comunicao entre aplicaes.

    s. Broadcast ReceiverUm Broadcast Receiver uma componente que reage a eventos/sinais de sistema. No processo

    de instalao de uma aplicao em Android, o instalador procura pelas componentes deste tipo e

    insere numa tabela de sistema as referncias sobre a que tipo de eventos aquela aplicao reage.

    Entre eventos deste tipo enviados pelo sistema operativo podem-se contar coisas como a

    mudana da hora actual, alterao do estado da bateria, alterao das condies de conectividade

    (passou a ter ligao, ficou sem ligao, etc), entre muitos outros. Desse modo, a ttulo de

    exemplo, possvel produzir uma aplicao que tenha uma componente deste tipo e que cadavez que o sistema envia um sinal de que se perdeu ligao rede, adiada a atualizao de

    contedos via rede at que o sinal de ligao restabelecida seja enviado e mais uma vez recebido

    pela nossa componente de Broadcast Receiver, desse modo fazendo uma gesto inteligente de

    quando que a aplicao vai executar cdigo relativo tentativa de obteno de atualizaes

    peridicas. Este e outros exemplos de gesto inteligente com recurso a Broadcast Receivers sero

    estudados em mais detalhe em captulos posteriores do livro.

    t. Content ProviderUm Content Provider uma forma de providenciar informao da nossa aplicao a outras

    aplicaes instaladas no sistema operativo. Isto permite criar um eco-sistema muito poderoso

    assim que o leitor de aperceber de que forma esta componente pode ser utilizada e das diversas

    aplicaes que atualmente j tiram ou permitem tirar partido desta capacidade. Um exemplo de

    uma aplicao com uma componente deste gnero a aplicao de Contactos (Contacts)

    presente na generalidade de terminais Android. Esta aplicao fornece um Content Provider para

  • 7/27/2019 Intro a Programacao Android Edicao 1

    39/101

    que qualquer outra aplicao possa saber quais os contactos guardados no dispositivo, e iterar

    sobre a listagem dos mesmos.

    A componente de Content Provider fornece deste modo uma forma geral e abstrata de fornecer os

    contedos da aplicao em que se insere, esta forma genrica segue sempre a mesma estrutura

    tornando fcil o uso desta componente por outras aplicaes. Ao mesmo tempo, a implementao

    de como a informao que est a ser fornecida da escolha do programador, que pode mesmocontrolar que tipo de informao fornecida e a forma como esta est guardada no dispositivo

    (podendo mesmo estar na nuvem ao invs de fisicamente no dispositivo por exemplo).

    Ciclo de vida de uma Activity

    Tal como j foi referido o Android um sistema operativo multitarefa, e tendo sido concebido

    nesse sentido desde o inicio do seu desenvolvimento consta de uma gesto inteligente e eficaz de

    processos, sendo que isto acarreta consequncias forma como se programam aplicaes naplataforma.

    As Activities contam com um conjunto de mtodos de callback 15 que devem ser usados na

    construo lgica de aplicaes. O diagrama apresentado de seguida pela figura 4.1 ilustra o ciclo

    de vida de uma Activity e os mtodos que callback (onStart, onPause, etc) que so chamados

    aquando a ocorrncia de cada uma das condies que lhes precedem.

    15 Mtodos chamados automaticamente pelo sistema face a um acontecimento especfico

  • 7/27/2019 Intro a Programacao Android Edicao 1

    40/101

    FFIIGGUURRAA44..3Ciclo de vida de uma Activity

    Para ilustrar uma estrutura de uma Activity deixamos em baixo um excerto de cdigo de uma

    Activity do Hello Worldtpico de Android. Neste momento no necessrio que o leitor perceba j

    toda a estrutura do cdigo aqui ilustrado, serve apenas para se comear a ambientar com a

    sintaxe

  • 7/27/2019 Intro a Programacao Android Edicao 1

    41/101

    import android.app.Activity;

    import android.os.Bundle;

    publicclass TestActivity extends Activity {

    /** Mtodo de Callback chamado quando a Activity criada inicialmente. */

    @Override

    publicvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    //Definir a layout da Activity baseada no ficheiro main.xml

    setContentView(R.layout.main);

    }

    }

    Gesto de recursos

    Uma das grandes potencialidades a nvel de programao da plataforma Android a sua fcil

    gesto e utilizao de recursos (Resources). Facilmente identificveis visto estarem sobre o

    directrio/resdo projecto, aqui que tudo aquilo o que no cdigo Java fica guardado,

    incluindo imagens.

    Como se pode ver pela figura 4.2, existem vrios sub-diretrios dentro do directrio /resquando

    se cria um projeto Android no Eclipse, servindo para categorizar os recursos que l esto e para

    que a plataforma Android os possa otimizar e usar da melhor maneira possvel tendo em conta a

    sua finalidade.

    Cada agrupamento de recursos dividido em duas partes: o tipo e o qualificador, podendo

    haver mais do que 1 qualificador. Na figura 4.2 podemos constatar que existem 5 grupos de

    recursos, sendo que apenas existem 3 tipos diferentes: drawable, layoute values. Estes sohabitualmente os 3 tipos de recursos mais usados na plataforma, embora hajam mais com outros

    propsitos. A tabela 4.1 mostra todos os tipos de recusos que existem.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    42/101

    FFIIGGUURRAA44..22Resourcesde um projecto novo no Eclipse

    NOME DESCRIO DE USO

    animator Defenies de animaes do tipo property

    anim Animaes do tipo tween

    color

    Usado para definio de cores ou para definies de Listas de Estado de Cor

    (Color State Lists) que so usadas para definio de uma cor para um estado

    (selecionado, pressionado, etc)

    drawable

    Onde so guardadas todas as imagens (incluindo definies em xml como

    podem serpor exemplo as animaes frame-by-frame) que sero usadas no

    projeto

    layout Define os layouts da interface com o utilizador

    menuDefinem o contedo dos menus aplicacionais bem como da Action Bar nasverses mais recentes de Android (Honeycomb e Ice Cream Sandwich)

    values

    Este tipo especial visto que pode albergar vrios tipos de recursos dentro de

    si, sendo o mais importante o tipo Stringsque um ficheiro xml com um nome

    especfico (strings.xml), que define os vrios textos para uso no projecto.

    Os outros recursos que podero ser inseridos neste tipo sero falados ao

    longo do livro quando pertinente

    Tabela44..1Tipos de Resources disponveis

  • 7/27/2019 Intro a Programacao Android Edicao 1

    43/101

    Conhecendo ento os tipos de recursos que podem ser utilizados, resta saber o que so

    exatamente os qualificadores. Queremos realar desde j que no necessrio para a definio

    de um grupo de recursos, o uso de um ou qualquer qualificador nesse grupo. Como visvel na

    imagem em cima, os tipos layoute valuesno tm qualquer qualificador, e o tipo drawable est

    dividido em 3 grupos por 3 qualificadores: hdpi, mdpie ldpi. Estes 3 qualificadores dizemrespeito aos DPI 16 do ecr onde a aplicao est a executar a um dado momento: 240dpi, 160dpi

    e 120dpi respetivamente. Esta diviso particularmente til quando queremos que a nossa

    aplicao no perca qualidade grfica dum tipo de ecr para outro.

    Os qualificadores so ento usados para diferenciar o mesmo recurso mas para outro tipo ou

    outra utilizao da aplicao. Por exemplo, para traduzir uma aplicao para Portugus, bastaria

    criar um grupo com o nome values-pt, e criar um ficheiro com o nome strings.xml l dentro

    como os mesmos valores existentes no string.xml global (que se encontra dentro do grupo de

    nome values apenas) mas com a traduo dos textos de cada valor para Portugus. Tambm

    bastante utilizados so os qualificadores land e port que dizem respeito s orientaes do ecr

    na Horizontal (Landscape) e na Vertical (Portrait) respetivamente. Com estes qualificadores, pode

    definir um layout duma Activity especfico para quando o ecr se encontra na horizontal, e outra

    para quando est na vertical.

    Uma grande potencialidade dos qualificadores que o pode agrupar vrios associando-os a um

    tipo de recurso. Por exemplo, se quiser definir um layout para quando um terminal estiver em

    com um orientao horizontal (landscape) e que tenha um ecr considerando largo (large)17

    ,ento pode definir o layout dentro dum grupo com o nome layout-large-land. Deste modo pode

    abstrair uma Activity que usa sempre o mesmo cdigo Java do seu aspecto visual de acordo com o

    terminal em que est a executar, sendo que a prpria plataforma decide que layout utilizar pois

    escolher o grupo que melhor se encaixar nas especificaes do dispositivo. No cdigo seguinte

    pode ver este exemplo.

    16 Pontos por polegada (Dots Per Inch)

    17 Mnimo de resoluo de 640 x 480 px

  • 7/27/2019 Intro a Programacao Android Edicao 1

    44/101

    Ficheiro: HelloWorldActivity.java

    publicclass HelloWorldActivity extends Activity {

    /** Mtodo de Callback chamado quando a Activity criada inicialmente. */

    @Override

    publicvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    }

    }

    FFIIGGUURRAA44..33Resourcesdo projecto HelloWorld

    Para aceder aos recursos que guarda dentro do projeto a partir do cdigo Java, utiliza-se a classe

    R que gerada automaticamente pelo ADT quando cria, apaga, ou altera algum recurso dentro da

    directoria/res. No caso dos layouts, podem ser acedidos fazendo referncia a R.layouts, e estesso todos os layouts definidos nos recursos do projecto, no havendo qualquer filtragem ou

    diferenciao sobre estes tendo em conta os qualificadores usados na sua definio.

    A funo para definir a UI duma Activity a setContentView(int value). Como se pode ver

    ento pelo cdigo em cima, aquela Activity usa um Layout com o nome main . Este recurso diz

    respeito ao main.xml que est presente na figura 4.3 . Pode constatar que existem 3 grupos de

    layout cada um com um main.xmll dentro, desde modo a plataforma que decide qual destes

  • 7/27/2019 Intro a Programacao Android Edicao 1

    45/101

    vai usar em tempo de execuo. Procurar primeiro o um que se aplique condio e/ou

    especificao atual do dispositivo, e caso no seja aplicvel ir ento usar a verso que se aplica a

    todos os outros casos, definida em/layout.

    aconselhada a leitura da pgina relativa a este assunto na documentao oficial para mais

    informaes :http://developer.android.com/guide/topics/resources/providing-

    resources.html#AlternativeResources .

    Android Manifest

    O Android Manifest onde definida a aplicao. Contm as definies das Activities, Services,

    Broadcast Receivers, permisses, compatibilidade com verses de Android, entre outros aspectos

    para que tanto o Android Market e o dispositivo possam filtrar aplicaes por compatibilidade,

    para gerir acessos a recursos da prpria aplicao e gerir tambm acessos da aplicao a recursos

    do sistema e/ou de outras aplicaes.

    A definio do Manifest feita atravs dum ficheiro chamado AndroidManifest.xml que se

    encontra na raiz do projecto. Este ficheiro composto pela tag com vrios atributos

    sendo que o package, versionCode e versionName so obrigatrios. A diferena entre os dois

    ltimos que o primeiro usado internamente pela plataforma (e pelo Android Market) para

    controlo de verses e pode ser qualquer nmero inteiro (p.e. 25), no tendo qualquer relao com

    o versionName que somente uma descrio verbal da verso para o utilizador ver (p.e. 1.0.5

    Beta). O atributo package o package name que foi atribudo aplicao quando esta foi

    criada.

    Aps um package name ser utilizado com uma assinatura digital no Android Market, estepackage name fica reservado para uso exclusivo e as atualizaes consecutivas tero de conter amesma assinatura digital. Guarde a sua assinatura digital num local seguro, tanto para no serroubada como para no a perder.

    Um AndroidManifest.xml muito bsico teria o seguinte aspecto:

  • 7/27/2019 Intro a Programacao Android Edicao 1

    46/101

    android:versionName="1.0" >

    Dentro da tag manifest podem existir vrias outras, algumas obrigatrias como a application e

    outras opcionais como por exemplo a uses-feature. Apresentamos de seguida as tags mais

    usadas que podem ser inseridas dentro da tag manifest, bem como um exemplo sucinto da sua

    utilizao.

    Consulte o manual online para esclarecimentos adicionais bem como todas a opes possveis paratags e atributos emhttp://developer.android.com/guide/topics/manifest/manifest-intro.html

    u. Uses-permissionEsta tag diz plataforma Android que a aplicao necessita de uma ou mais permisses para

    executar corretamente. Num captulo mais adiante iremos falar mais aprofundadamente a questo

    das permisses em Android. Uma permisso que usada muito frequentemente a

    android.permission.INTERNET, que d permisso de uma aplicao aceder internet. Necessria

    para aceder a um WebService para obteno de dados por exemplo.

    As permisses de sistema so todas as que comeam por android.permission, todas as outras sopermisses de outras aplicaes que declararam no seu Manifest uma nova permisso usando a

    tag permission para que outras aplicaes podessem aceder a dados e/ou recursos dela.

    Exemplo de uso:

    v. PermissionComo falado anteriormente, esta tag serve para declarar, e deste modo proteger, o acesso a

    alguns dados ou servios disponibilizados pela aplicao a outras aplicaes. A permisso pode

    ter vrios nveis de alerta para o utilizador, mediante a importncia do recurso que estar a ser

    acedido por outra aplicao. Por exemplo, se uma aplicao decidir partilhar um servio que

    possibilita a outra aplicao o acesso a uma palavra-passe introduzida pelo utilizador, esta

    permisso deve ser tida em conta aquando da instalao da aplicao que a usa, e portanto,

    http://developer.android.com/guide/topics/manifest/manifest-intro.htmlhttp://developer.android.com/guide/topics/manifest/manifest-intro.htmlhttp://developer.android.com/guide/topics/manifest/manifest-intro.htmlhttp://developer.android.com/guide/topics/manifest/manifest-intro.html
  • 7/27/2019 Intro a Programacao Android Edicao 1

    47/101

    considerada perigosa visto disponibilizar dados pessoais. Os nveis de alerta so os seguintes:

    normal, dangerous, signature, signatureOrSystem.

    Exemplo de uso:

    w.Uses-sdk

    Esta tag define vrios aspetos da aplicao em relao ao SDK usada para a criar. Pode conter 3

    atributos: minSdkVersion, targetSdkVersion, e maxSdkVersion. O primeiro usado para dizer

    que verso de SDK a mnima para aplicao executar corretamente. muito til para criar uma

    aplicao compatvel com verses anteriores do SDK. Se este atributo no for definido, ele toma

    automaticamente o valor 1, fazendo a aplicao compatvel com todas as verses de Android at

    especificada em maxSdkVersion caso esta exista. Se a aplicao usar APIs apenas definidas em

    verses superiores de Android, a aplicao ir terminar anormalmente durante a sua execuo

    por no ter o suporte s APIs necessrias no terminal. portanto extremamente recomendado o

    teste da aplicao desde a minSdkVersion at targetSdkVersion.

    O targetSdkVersion, define a SDK com a qual a aplicao foi compilada e em qual foi

    efetivamente testada. Se durante o desenvolvimento da aplicao est a ser usada a verso da

    SDK 4.0 (14), garantido que a aplicao vai funcionar sobre esta verso de Android visto ter sido

    compilada com ela.

    O maxSdkVersion um atributo raramente usado pois no tem muita lgica o seu uso na

    generalidade dos casos, visto a plataforma garantir a retro-compatibilidade das aplicaes antigas

    em verses de Android mais recentes. Portanto uma aplicao com um targetSdkVersion=7

    (Android 2.1), vai funcionar da mesma forma na verso de SDK 14 (Android 4.0). No entanto

    possibilitado ao programador que a sua aplicao s seja executada em terminais at uma

    determinada verso de Android e para isso deve usar este atributo.

    Exemplo de uso:

  • 7/27/2019 Intro a Programacao Android Edicao 1

    48/101

    x. Uses-configurationCom esta tag, define-se que tipo de hardware, nomeadamente em termos de controlo do

    utilizador, uma aplicao necessita. Existem 5 atributos que podem ser definidos dentro desta tag

    que so: reqFiveWayNav, reqHardKeyboard, reqKeyboardType, reqNavigation,

    reqTouchscreen. A mair parte dos atributos explicam-se automaticamente pelo nome deles

    tirando o reqFiveWay que diz respeito a um controlo como um D-Pad, ou uma TrackBall18, que

    permita ao utilizador o input direcional (cima, baixo, esquerda, direita) e clique; o atributo

    reqNavigation no diz respeito navegao GPS mas sim a algo parecido com o reqFiveWay,

    mas especificando exatamente que tipo de controlo se quer (D-Pad, TrackBall, ).

    Este atributo tem a particularidade de se poder definir mltiplas vezes, significando que a

    aplicao suporta vrios formas de input do utilizador. Como exemplo, uma aplicao que

    necessite dum touchscreen que possa ser usado por uma caneta styluse um teclado QWERTY ou

    um teclado numrico, teria esta definio:

    y. Uses-feature

    Esta tag usada para definir que hardware, e em alguns casos que stackde software, a aplicao

    necessitar para funcional corretamente e ainda se mesmo necessria ou no. Existem muitas

    18 Esta caracterstica de hardware pouco comum na generalidade dos novos dispositivos

    Android, e portanto de carcter opcional.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    49/101

    possibilidades para esta tag, e descreve-las todas aqui seria demasiado extenso, mas por exemplo

    uma aplicao que tire fotografias que incorpore geo-tagging (localizao da fotografia nos

    metadados da mesma) caso exista sistema de localizao no dispositivo, necessitar pelo menos

    de usar a cmara e obter a localizao. Como tal necessitaria de declarar no seu Manifest, que usa

    uma cmara e que usar um sistema de localizao se disponvel. Seria ento definido assim:

    z. Supports-screensEsta tag explicar-se a sim mesma. Serve simplesmente para definir que tipo de ecrs a aplicao

    suporta. Se uma aplicao poder funcionar em todo o tipo de ecrs, a definio seria assim:

    aa.ApplicationAqui define-se a aplicao em si, que Activities fazem parte dela, Services, Receivers, Providers,

    etc. Todo um conjunto de componentes e propriedades, que interligados entre si formam a

    aplicao.

    Exemplo de uso:

  • 7/27/2019 Intro a Programacao Android Edicao 1

    50/101

    android:label="@string/app_name" >

    Classe application

    A classe Application serve para manter um estado global sobre a aplicao em si. Pode ser

    usada muito facilmente, acabando muitas vezes por ser bastante til para partilhar objetos e

    propriedades entre vrios componentes ( Services, Activities, etc). Para a usar tem que a definir no

    AndroidManifest.xml dentro da tag como elemento. Por exemplo:

    []

    Seguindo o exemplo declarado no AndroidManifest em cima, deverse- criar uma classe que por

    sua vez estende a classe Application com o nome MyApp. De notar que esta classe instanciada

    primeiro que qualquer outro objeto da aplicao ficando portanto desde logo disponvel para ser

    usada quando necessrio pelo programador. Como exemplo, se quiser partilhar um valor por toda

    a aplicao e para evitar ter que definir esse valor em todas as classes que o requerem, poderia

    proceder da seguinte forma:

    publicclass MyApp extends Application {

  • 7/27/2019 Intro a Programacao Android Edicao 1

    51/101

    privatestatic MyApp singleton;

    privateintmSharedNumber = 5;

    publicstatic MyApp getInstance() {

    returnsingleton;

    }

    @Override

    publicvoidonCreate() {

    super.onCreate();

    singleton = this;

    }

    publicint getSharedNumber() {

    returnmSharedNumber;

    }

    }

    Utilizando o princpio dos singletons19, em que cada classe s poder ter uma nica instanciao,

    podemos muito facilmente obter o desejado: o acesso ao valor partilhado em qualquer

    componente da aplicao. Portanto, num caso tpico em que fosse necessrio aceder ao valor

    partilhado, teria simplesmente que fazer o seguinte:

    int x = MyApp.getInstance().getSharedNumber();

    Claro que este tipo de utilizao serve para partilhar um ou mais objetos por toda a aplicao

    usando exatamente o mesmo mtodo, e no est limitado ao uso deste exemplo.

    A classe Application, pode tambm controlar a forma de como e quando libertar memria quandoo Sistema est a precisar. A plataforma avisa todas as aplicaes em execuo que precisa de

    memria, para que estas removam alguns dos seus objetos evitando assim ser terminadas pelo

    sistema, mas cabe ao utilizador especificar o comportamento desta ao. Para tal, basta substituir

    (override) a funo onLowMemory() na classe Application criada. Exemplo:

    19 http://en.wikipedia.org/wiki/Singleton_pattern

  • 7/27/2019 Intro a Programacao Android Edicao 1

    52/101

    @Override

    publicvoidonLowMemory() {

    // Limpar alguns objetos de memria

    }

  • 7/27/2019 Intro a Programacao Android Edicao 1

    53/101

    5555CCAAMMAADDAA DDEEUUII DDEE

    AANNDDRROOIIDD

    6

    CCOONNCCEEIITTOOSSBBAASSEE

    Neste captulo damos-lhe a conhecer as bases aplicacionais da plataforma

    Neste captulo ir ficar com uma noo das componentes Interface Grfica (GUI ou apenas UI) da

    plataforma Android, como se relacionam entre elas, e de como usar alguns sistemas de alerta (caixas de

    dilogo, notificaes) usando as ferramentas base que a plataforma disponibiliza.

    O que so views

    Views so o elemento base das aplicaes Android e basicamente so tudo o que se v no ecr.

    Existem tambm algumas Views que no se vm como so o caso dos Layouts como ver a

    seguir. Portanto, caixas de texto (TextView), caixas de entrada de texto (EditText), imagens

    (ImageView), botes (Button), listas (ListView), etc., so tudo views que podem ser usadas numa

    aplicao Android e que compem a interface para o utilizador.

    Uma aplicao Android usar as Views que necessitar para alcanar o seu objetivo e no h

    nenhuma que seja de uso obrigatri, at porque por exemplo existem aplicaes que correm nos

    terminais como servios e que no tm qualquer interao direta com o utilizador, portanto essas

    no usaro Views.

    Uma View portanto a classe base duma grande parte das classes disponveis na plataforma e

    sendo base define vrias coisas que importante saber e que comum a todas as Views:

    Posio Tamanho Propriedades bsicas comuns (Visibilidade, Focus, etc.) Desenho da View Eventos

  • 7/27/2019 Intro a Programacao Android Edicao 1

    54/101

    Existem muitas mais propriedades que so comuns a todas as Views, mas estas so as que mais

    se usam no desenho e construo da interface. sempre necessrio ter em conta o tamanho que

    vai ocupar no ecr, o seu posicionamento relativo a outras Views, como so organizadas no ecr

    (usando vrios tipos de Layouts), se est visvel para o utilizador ou se invisvel ficando visvel

    aps algo acontecer na aplicao, isto tudo para que o utilizador tenha uma experincia de

    utilizao do terminal e especialmente da aplicao que se est a cria, fluda e que no seja

    confusa. Outro aspeto muito especial das Views o tratamento de eventos, por exemplo:

    OnTouch e OnFocus. Estes exemplos mais genricos e comuns a todas as Views, fazem parte

    da classe me View, mas outras Views descendentes (directa ou indiretamente) desta classe

    adicionam novos eventos que muitas vezes vo ser usados, como por exemplo o OnKeyDown da

    View de nome TextView.

    FFIIGGUURRAA55..44--Exemplo de algumas Views dentro da mesma Layout

    (TextView, Button, EditText, ImageView, CalendarView)

    Layouts

    Layouts so Views especiais que vo organizar outras Views de maneira a que fiquem dispostas

    da forma que deseja no ecr. um conjunto de Layouts que define como uma Activity ou um

    Widget mostram o seu contedo. Pode-se dizer portanto que os Layouts so o esqueleto ondetodas as outras Views vo assentar.

    Para maior facilidade e portabilidade, todos os Layouts devem ser definidos em ficheiros XML,

    contudo possvel criar um Layout completamente em cdigo mas este caso no vai ser coberto

    neste livro. A questo da portabilidade bastante importante porque estando definido o Layout

    em XML, facilmente se agarra nesse ficheiro e se adapta para outro tipo de terminal ou para

    vrios tipos de display(como por exemplo Portraitvs. Landscape), j para no falar que permite

  • 7/27/2019 Intro a Programacao Android Edicao 1

    55/101

    tirar partido da seleo adquada do layout correto que fornecido pela gesto de recursos como

    foi apresentada em captulos anteriores.

    Em tempo de edio, algo que achar bastante til quando desenhado um Layout usando o

    Eclipse o Outline que normalmente se encontra no lado direito quando se est a editar um

    ficheiro. Quando o ficheiro um XML que define um Layout, o Outline mostra a estrutura do

    Layout sendo fcil visualizar a estrutura que estamos a criar.

    FFIIGGUURRAA55..22--Estrutura do ficheiro main.xml de um HelloWorld

    Existem ento vrios tipos de Layouts e neste captulo sero abordadosos mais usados nas

    aplicaes bem um exemplo para cada.

    O Layout mais simples de todos o FrameLayout. o mais simples porque a organizao dele

    muito bsica: Todas as Views descendentes deste Layout, so posicionadas no topo superior

    esquerdo do Layout ficando portanto umas por cima das outras caso haja mais que uma.

    particularmente til para espaos vazios numa Activity, que pode ser posteriormente preenchido

    com uma imagem que pode variar, por exemplo, consoante algo que tenha sido selecionado.

    FFIIGGUURRAA55..33--FrameLayout com duas imagens

    Provavelmente, o Layout mais utilizado em Android o LinearLayout. Basicamente este Layout

    permite dispor as Views descendentes todas seguidas umas s outras podendo ser orientado

    vertical ou horizontalmente de acordo com a escolha do programador, bastando para isso

  • 7/27/2019 Intro a Programacao Android Edicao 1

    56/101

    alterar o atributo android:orientation para verticalou horizontalrespetivamente. A figura 5.4

    evidencia a forma como a orientao afecta a disposio visual.

    FFIIGGUURRAA55..44-- Duas LinearLayout com a mesma definio,

    mas orientaes diferentes

    Outro Layout que til o TableLayout. Este layout tem como principal caracterstica a de

    organizar as suas Views descendentes num formato tabular; para o efeito o TableLayout axuliado com outra View que a TableRow. Ao usar ambas pode ento criar Layouts que se cuja

    disposio dos elementos se paream com uma tabela. Ainda que sendo uma tabela, h coisas

    que no se conseguem fazer como por exemplo expandir uma clula para ocupar vrias colunas

    (como em HTML). Em baixo ver a figura 5.5 e o exemplo 5.1 que corresponde ao cdigo XML que

    deu origem ao resultado da dita figura.

    A tabela criada ter tantas colunas quantas a linha com mais colunas tiver, e noapresentar qualquer tipo de linhas de separao entre as clulas.

  • 7/27/2019 Intro a Programacao Android Edicao 1

    57/101

    FFIIGGUURRAA55..55-- Outline e resultado dum TableLayout

    EEXXEEMMPPLLOO55..11

  • 7/27/2019 Intro a Programacao Android Edicao 1

    58/101

    android:layout_gravity="right"

    android:text="Linha1 Coluna2"/>

    Outro tipo de layout bastante popular o RelativeLayout. Dever evitar o seu uso se for possivl

    produzir o mesmo efeito com recurso a outro tipo de Layout visto que pode ficar completamente

    diferente daquilo que deseja dependendo do tipo de ecr do terminal, e tambm porque se tiver

    muitos descendentes deste Layout o cdigo torna-se mais difcil de ler. Este tipo de Layout

    funciona posicionando os seus descendentes relativos uns aos outros. Por exemplo, diz-se que

    uma determinada TextView est esquerda duma EditText. A associao feita com recurso

    propriedade android:idque o programador define manualmente. Sabendo isto, s vezes poder-

    se- deparar com o problema de dependncia circular que quando dois descendentes deste

    Layout se referenciam um ao outro tornando assim impossvel a criao do Layout. No entanto,

  • 7/27/2019 Intro a Programacao Android Edicao 1

    59/101

    consegue ser um Layout que bom de usar em casos simples em que o posicionamento relativo

    essencial.

    O exemplo da figura 5.6 (investigue o cdigo que o originou no exemplo 5.2) poderia ser obtido

    com recurso exclusivo a LinearLayout, sendo que nesse caso teria de conter 1 LinearLayout me, e

    2 LinearLayout filhos para cada linha. Ou seja, o 1 trataria da disposio vertical e os outros dois

    da disposio horizontal de componentes.

    FFIIGGUURRAA55..66-- Outline e resultado dum RelativeLayout

    EEXXEEMMPPLLOO55..22

  • 7/27/2019 Intro a Programacao Android Edicao 1

    60/101

    android:layout_height="wrap_content"

    android:layout_alignParentTop="true"

    android:layout_toRightOf="@+id/textView1"

    android:inputType="textPersonName"/>

    Com o ICS20 veio um novo Layout que veio resolver algumas dificuldades que existiam quando se

    tentavam criar certos tipos de layouts com o Layouts existentes at ento. Este novo tipo, o

    GridLayout, tenta juntar o m