Escolar Documentos
Profissional Documentos
Cultura Documentos
ARIO ii
3.4.4 Content Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5 Aplicac oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5.1 Componentes da aplicac ao . . . . . . . . . . . . . . . . . . . . . . . 20
Conclus oes sobre a arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
II Desenvolvimento 24
4 Fundamentos de programacao no Android 25
4.1 Linguagem e paradigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2 Distribuic ao das aplica coes . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3 Independencia e estabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.4 Activities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5 Servicos Baseados em Localizacao 31
5.1 Aplicac oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2 GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.3 Mapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.4 Google Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.5 LBS no Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.5.1 O pacote Location . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6 Aplicacao Onde Estou 38
6.1 OndeEstou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Considerac oes sobre a aplicac ao . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Consideracoes nais 45
Apendices 46
SUM
ARIO iii
A Codigos-fonte 46
A.1 OndeEstou.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.2 Setup.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
A.3 MyProximityAlert.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
A.4 AndroidManifest.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
A.5 main.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
B Interface da Aplicacao 59
Bibliograa 61
Lista de Figuras
3.1 Arquitetura do Sistema (fonte: Application Fundamentals) . . . . . . . . . 5
3.2 Kernel Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3 Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4 Camada de abstracao de hardware . . . . . . . . . . . . . . . . . . . . . . 16
3.5 Android Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.6 Framework de aplicacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.7 Applicac oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.1 Ciclo de vida de uma activity (fonte: Activity Android Developers) . . . . 28
4.2 Super classes de Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
B.1 Interface da Aplicacao Onde estou . . . . . . . . . . . . . . . . . . . . . . . 59
iv
Codigos-fonte
4.1 Principais metodos da classe Activity . . . . . . . . . . . . . . . . . . . . . 29
A.1 Classe OndeEstou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
A.2 Classe Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
A.3 Classe MyProximityAlert . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
A.4 Arquivo de conguracao da aplicacao AndroidManifest.xml . . . . . . . . . 57
A.5 Arquivo de layout main.xml . . . . . . . . . . . . . . . . . . . . . . . . . . 58
v
Lista de Abreviaturas
ANATEL - Agencia Nacional de Telecomunicacoes
API - Application Programming Interface
BSD - Berkeley Software Distribution
DVM - Dalvik Virtual Machine
FAQ - Frequently Asked Questions
GPL - General Public License
GPS - Global Positioning System
GUI - Graphical User Interface
JVM - Java Virtual Machine
KML - Keyhole Markup Language
LCD - Liquid Crystal Display
mp3 - MPEG Layer 3
MPGE - Moving Picture Experts Group
PDA - Personal Digital Assitent
SDK - Software Development Kit
XML - eXtensible Markup Language
Parte I
Introducao ao Android
1
1 INTRODUC
AO
Os celulares ja se consolidaram no meio comercial. Segundo os ultimos dados da ANATEL
(Agencia Nacional de Telocomunicacoes) ha, atualmente, cerca de 166 milhoes de celulares
habilitados no Brasil todo. Esse crescimento, n ao s o no Brasil mas no mundo inteiro, vem
abrindo espaco para pesquisas na area de desenvolvimento para dispositivos m oveis.
O hardware presente nos celulares e dispositivos m oveis em geral teve uma me-
lhora muito signicativa nos ultimos anos. Alem disso, as tecnologias de redes sem o e
internet banda larga tem crescido muito pelo mundo todo e tem proporcionado uma gama
de recursos aos dispositivos m oveis, recursos estes antes presentes apenas nos desktops.
Essa aproximac ao dos dispositivos m oveis em relacao aos desktops, nao s o em termos de
hardware, mas tambem nas tecnologias de banda larga, tem trazido `a tona diversas linhas
de pesquisa na area de desenvolvimento de software.
No desenvolvimento para celulares e dispositivos embarcados em geral e muito
importante considerarmos algumas caractersticas como por exemplo a capacidade de:
a) processamento, b) memoria, c) disco (armazenamento), d) bateria, etc.
Embora os celulares hoje em dia tenham um alto desempenho no quesito hardware,
ainda assim poderamos dizer que o hardware e muito limitado se comparado aos desktops.
Embora essa armac ao seja verdadeira, os softwares cada vez mais tem migrado, ou
melhor, tem estado presente tambem nos dispositivos moveis. Em outras palavras, os
softwares que est ao rodando atualmente nos desktops (muito mais potentes de que os
dispositivos moveis) est ao rodando nos celulares tambem.
Assim, nesse contexto, cabe aos produtores de hardware melhorar o hardware
dos dispositivos, buscando aproximar (na medida do possvel) os celulares dos desktops.
Aos desenvolvedores, cada vez mais eles precisam ser capazes de fazer softwares mais
compactos e otimizados, contribuindo assim para o crescimento da plataforma movel.
2
CAP
ITULO 1. INTRODUC
AO 3
Os ambientes atuais de programa cao para dispositivos m oveis sao criancas ainda
em termos de padr oes e metodologias de desenvolvimento. O que temos atualmente e uma
serie de plataformas onde h a desenvolvimento em paralelo, cada aplicacao e desenvolvida
para uma linha de celulares ou, as vezes, para um unico celular. Essa falta de padr oes e
prejudicial para os desenvolvedores.
Nesse contexto, foi criado um sistema operacional para celulares chamado Android.
O Android e um sistema de c odigo aberto que oferece aos fabricantes de dispositivos
m oveis um sistema completo que gerencie o hardware. Em outras palavras, o Android e
uma soluc ao em software criada para prover aos dispositivos moveis a) gerenciamento de
hardware (func ao de um sistema operacional), b) suporte `a drivers plugaveis, c) suporte
para desenvolvimento em linguagem nativa C e linguagens de alto-nvel como Java e XML,
d) frameworks e APIs de desenvolvimento, entre outros.
Aos desenvolvedores, o Android oferece suporte completo ` a programacao. Mais
adiante, no decorrer deste trabalho, serao mostradas em detalhes as caractersticas de
programac ao para a plataforma.
1.1 Objetivos
Hoje em dia, torna-se indispens avel aos desenvolvedores e especialistas da area de com-
putac ao conhecer as plataformas, tecnicas de programac ao e APIs disponveis para de-
senvolvimento de aplicac oes em ambientes moveis.
Este projeto tem como objetivo apresentar o Android, detalhando pontos impor-
tantes da sua arquitetura e o ciclo de vida das aplicacoes. Alem disso pretende-se mostrar
como iniciar a construc ao de um programa basico para o Android.
Pretende-se, ao nal deste trabalho, desenvolver uma aplicac ao baseada em loca-
lizac ao que ir a utilizar o servico GPS e mostrar a localizac ao do dispositivo atraves de
mapas utilizando a API do Google Maps. Atraves da aplicacao pretende-se mostrar os
recursos que a plataforma Android oferece ` as aplicacoes baseadas em localiza cao.
2 ANDROID
Android e uma pilha de softwares para dispositivos moveis que inclui sistema operacional,
middleware e aplica coes. Entende-se por pilha de software um conjunto de aplicac oes
que trabalham em conjunto para atingir determinado objetivo. Um Sistema Operacional,
por exemplo, e uma pilha de softwares. Ele contem diversas aplicac oes trabalhando em
conjunto para atingir seu objetivo, que e gerenciar o hardware. O termo pilha e usado
porque numa pilha um elemento depende de outro. Essa ideia de dependencia e o que se
quer deixar claro no termo Pilha de Softwares (em ingles Software Stack).
No Android, alem do Sistema Operacional ainda e oferecida uma gama de recursos
para programac ao e desenvolvimento. Esses recursos incluem ferramentas de desenvolvi-
mento (compiladores, emuladores, etc), classes re-escritas, bibliotecas, APIs e Frameworks
para tornar possvel a confec cao de softwares para o Android.
Todos esses recursos sao fornecidos utilizando a linguagem de programacao Java.
Vamos falar um pouco sobre os recursos mais importantes a seguir.
O pr oximo captulo deste documento ira descrever mais detalhadamente a arqui-
tetura do Android.
4
3 ARQUITETURA DO SISTEMA
E importante ressaltar que todas as classes em Java foram reescritas para uso
especco pela M aquina Virtual Dalvik. Apesar de algumas classes serem bem parecidas
(ou identicas) com as classes Java, elas foram reescritas. Portanto, o Android n ao usa as
mesmas classes Java.
Para se ter uma nocao das classes Java re-implementadas segue uma pequena lista
com as classes mais comuns, todas reescritas para o Android:
Classes Java
java.io
java.math
java.net
java.security
java.sql
java.util
Outras
junit.framework
CAP
ITULO 6. APLICAC
AO ONDE ESTOU 39
6.1 OndeEstou
A classe principal do programa, OndeEstou.java tem a func ao de um mapa mostrar na
tela e mostrar a atual posic ao do dispositivo, atraves de GPS.
O codigo completo da classe segue em anexo no apendice A.1, pagina A.1.
A instanciac ao do mapa e do seu controlador e feita da seguinte maneira:
41 myMapView = (MapView) fi ndVi ewById (R. i d . myMapView) ;
42 mapControl l er = myMapView. ge t Cont r ol l e r ( ) ;
Para que a declara cao funcione o objeto myMapView deve estar previamente de-
clarado no arquivo de layout:
10 <com. googl e . androi d . maps . MapView
11 andr oi d: i d=@+i d /myMapView andr oi d: l ayout wi dt h= f i l l p a r e n t
ITULO 6. APLICAC
AO ONDE ESTOU 40
Depois de desenhar o mapa na tela, e hora de comecar a pensar em localizac ao.
Para isso e feita uma requisicao do servico do sistema e a denicao do nosso provedor de
conte udo (GPS neste caso):
54 l ocati onManager = ( Locati onManager ) get Sys t emSer vi ce ( Context .
LOCATION SERVICE) ;
57 St r i ng pr ovi der = Locati onManager . GPS PROVIDER;
Nesse ponto, a aplicac ao tem acesso ao dispositivo de GPS do aparelho. Agora
e preciso requisitar as informac oes vindas do GPS. Para isso deve ser feita a primeira
requisic ao e cadastrar a activity existente (a classe OndeEstou estende MapActivity)
para receber atualiza coes de localiza cao:
60 Locati on l o c a t i o n = l ocati onManager . getLastKnownLocati on (
pr ovi der ) ;
63 updateMap( l o c at i o n ) ;
67 l ocati onManager . requestLocati onUpdates ( provi der , 2000 , 10 ,
68 l o c a t i o nLi s t e ne r ) ;
Agora a localizacao no mapa deve ser mostrada. A fun cao updateMap(Location
location) j a foi chamada na linha 63. O metodo updateMap atualiza o mapa cada vez
que o dispositivo mudar sua localiza cao. Cada vez que isso acontece ele realiza o processo
de geocoding para mostrar na tela o endereco onde o aparelho se encontra. Alem disso, o
metodo mostra as coordenadas na parte de cima do mapa:
107 / At ual i z a o mapa com a nova l o c a l i z a c a o /
108 private void updateMap( Locati on l oc at i on ) {
109
110 myLocationText = ( TextView) fi ndVi ewById (R. i d . myLocationText )
;
111
112 St r i ng l at LongSt r i ng ;
113 St r i ng addr e s s St r i ng = Endereco nao encontrado ;
114
115 i f ( l oc a t i on != nul l ) {
CAP
ITULO 6. APLICAC
AO ONDE ESTOU 41
116
117 // Def i ne a l o c a l i z a c a o at ual
118 Double geoLat = l o c a t i o n . get Lat i t ude ( ) 1E6 ;
119 Double geoLng = l o c at i on . getLongi tude ( ) 1E6 ;
120 GeoPoint poi nt = new GeoPoint ( geoLat . i ntVal ue ( ) , geoLng .
i nt Val ue ( ) ) ;
121
122 // At ual i z a o mapa
123 mapControl l er . s et Cent er ( poi nt ) ;
124
125 // Formata as coordenadas
126 Double l a t = l oc a t i on . get Lat i t ude ( ) ;
127 Double l ng = l o c a t i o n . getLongi tude ( ) ;
128 l at LongSt r i ng = Lat : + F. roundSi xDeci mal s ( l a t ) + ,
Long :
129 + F. roundSi xDeci mal s ( l ng ) ;
130
131 // Mostra as coordenadas na par t e de cima da t e l a
132 myLocationText . setText ( Minhas coordenadas : \ n +
l at LongSt r i ng ) ;
133
134 // Busca o endereco at r aves do GeoCoder
135 // Geocoder gc = new Geocoder ( t hi s , Local e . g e t De f aul t ( ) ) ;
136 Geocoder gc = new Geocoder ( this , Local e . ENGLISH) ;
137 try {
138 Li s t <Address> addr es s es = gc . getFromLocati on ( l at , l ng
, 1) ;
139 St r i ngBui l de r sb = new St r i ngBui l de r ( ) ;
140 i f ( addr es s es . s i z e ( ) > 0) { // se houver pel o menos
um endereco
141 Address addr es s = addr es s es . get ( 0) ;
142
143 // Formata o endereco
144 for ( i nt i = 0; i < addr es s .
CAP
ITULO 6. APLICAC
AO ONDE ESTOU 42
getMaxAddressLi neIndex ( ) ; i ++) {
145 i f ( i == ( addr es s . getMaxAddressLi neIndex ( )
1) )
146 sb . append ( addr es s . getAddressLi ne ( i ) ) ;
147 el se
148 sb . append ( addr es s . getAddressLi ne ( i ) ) .
append ( ) ;
149 }
150 }
151 addr e s s St r i ng = sb . t oSt r i ng ( ) ;
152 } catch ( IOExcepti on e ) {
153 }
154 } el se {
155 l at LongSt r i ng = Local i z acao nao encontrada ;
156 }
157
158 // Mostra na t e l a o endereco ob t i do at r aves do GeoCoder
159 Toast . makeText ( OndeEstou . this , addr es s St r i ng , Toast .
LENGTHLONG) . show( ) ;
160 }
Para que a aplicac ao funcione corretamente falta apenas mostrar como funciona
o listener (func ao que espera por eventos). Na lina 67 e passado por par ametro uma
vari avel chamada locationListener. Essa variavel e uma instancia de uma interface. Toda
instancia de interface deve implementar todas as func oes que a interface declarar. Neste
caso, foi implementado o metodo onLocationChanged(Location location) e o metodo
onProviderDisabled(String provider) (chamado quando o GPS do aparelho e desli-
gado). A implementacao destes dois metodos apenas chama a mesma func ao que atualiza
o mapa explicada anteriormente:
91 private f i nal Loc at i onLi s t e ne r l o c a t i o nLi s t e ne r = new
Loc at i onLi s t e ne r ( ) {
92 public void onLocati onChanged ( Locati on l oc a t i o n ) {
93 updateMap( l o c at i o n ) ;
94 }
CAP
ITULO 6. APLICAC
AO ONDE ESTOU 43
95
96 public void onProvi derDi sabl ed ( St r i ng pr ovi der ) {
97 updateMap( nul l ) ;
98 }
99
100 public void onProvi derEnabl ed ( St r i ng pr ovi der ) {
101 }
102
103 public void onStatusChanged ( St r i ng provi der , i nt s t at us ,
Bundle e xt r as ) {
104 }
105 };
CAP
ITULO 6. APLICAC
AO ONDE ESTOU 44
Considerac oes sobre a aplicacao
A aplicac ao Onde Estou foi criada com o intuito de mostrar as tecnicas de programac ao
de um LBS no Android.
Conforme o usu ario se movimenta, o aparelho interage com ele. Baseado na sua
localizac ao, o aparelho emite informac oes relevantes para o usu ario. Aqui nao estamos
entrando na quest ao de qual informa cao e importante para qual tipo de usuario. Estamos
apenas apresentando um software b asico que implenta funcionalidade de alertas baseados
em localizacao atraves de GPS.
Aplicac oes deste tipo poderiam ser utilizadas para emitir alertas enquanto o usu ario
est a dirigindo (algum tipo de alerta que seja interessante ao motorista, como por exemplo
o fato de que tenha ocorrido um acidente logo ` a frente, ou condic oes climaticas).
Entenda que o quesito localiza cao e o fator principal nestas aplicac oes. Com a
informac ao de localizac ao as aplicacoes podem realizar tarefas mais especcas e mais
interessantes para o usu ario. Imagine se voce estivesse indo pra a praia, e um sistema
lhe enviasse uma mensagem avisando que ocorreu um grave acidente na estrada rural de
uma cidade do interior. Esta informac ao nao tem importancia para quem est a indo pra
praia. Por outro lado seria muito interessante pra um cidad ao que est a viajando saber
que aconteceu algum tipo de problema e poder tomar alguma atitude.
Outro cen ario interessante pode ser o seguinte: uma aplicacao que mostra os pontos
da cidade onde o motorista deve diminuir a velocidade (estes podem podem ser radares,
escolas, areas em obras, etc).
O apendice B mostra a interface da aplicac ao Onde Estou.
Considerac oes nais
Os ambientes m oveis, principalmente os de telefonia celular tem causado um grande im-
pacto na area de desenvolvimento de software e podemos dizer que o crescimento e certo,
um caminho sem volta. O potencial das aplicacoes baseadas em localiza cao e grande e
ainda pouco explorado, mas com certeza num futuro breve essas aplica coes estar ao por
todo lugar (literalmente). O n umero de celulares no mundo j a e tres vezes maior que o de
computadores. Logo, n ao e pretencao dizer que o futuro do celular e um mercado solido
para quem quiser investir nele.
ODIGOS-FONTE
Este captulo contem o c odigo-fonte completo da aplica cao proposta.
A.1 OndeEstou.java
C odigo-fonte A.1: Classe OndeEstou
1 package org . t hi agos ouza . ondeestou ;
2
3 import j ava . i o . IOExcepti on ;
4
5 import j ava . u t i l . Li s t ;
6 import j ava . u t i l . Local e ;
7
8 import com. googl e . androi d . maps . GeoPoint ;
9 import com. googl e . androi d . maps . MapActi vi ty ;
10 import com. googl e . androi d . maps . MapControl l er ;
11 import com. googl e . androi d . maps . MapView;
12 import com. googl e . androi d . maps . MyLocati onOverl ay ;
13
14 import androi d . content . Context ;
15 import androi d . l o c a t i o n . Address ;
16 import androi d . l o c a t i o n . Geocoder ;
17 import androi d . l o c a t i o n . Locati on ;
18 import androi d . l o c a t i o n . Loc at i onLi s t e ne r ;
19 import androi d . l o c a t i o n . Locati onManager ;
20
21 import androi d . os . Bundle ;
22
46
AP
ENDICE A. C
ODIGOS-FONTE 47
23 import androi d . wi dget . TextView ;
24 import androi d . wi dget . Toast ;
25
26 public cl ass OndeEstou extends MapActi vi ty {
27
28 Locati onManager l ocati onManager = nul l ;
29 MapControl l er mapControl l er ;
30 public stati c MapView myMapView;
31
32 TextView myLocationText ;
33 TextView myAppl i cati onFooter ;
34
35 @Override
36 public void onCreate ( Bundle i c i c l e ) {
37 super . onCreate ( i c i c l e ) ;
38 setContentVi ew(R. l ayout . main) ;
39
40 // I nt anci acao da c l a s s e MapView ( do mapa propri ament e di t o )
41 myMapView = (MapView) fi ndVi ewById (R. i d . myMapView) ;
42 mapControl l er = myMapView. ge t Cont r ol l e r ( ) ;
43
44 // Conf i gura opcoes de v i s ua l i z a c a o do mapa
45 myMapView. s e t S a t e l l i t e ( f al se ) ;
46 myMapView. s e t Tr a f f i c ( true ) ;
47
48 // Conf i gura o zoom no mapa (211)
49 mapControl l er . setZoom( 16) ;
50 myMapView. setBui l tI nZoomControl s ( true ) ; // mostra o c ont r ol e
de zoom
51 myMapView. di spl ayZoomControl s ( f al se ) ;
52
53 // Obtem uma i ns t anc i a do s e r v i c o ger enci ador de l o c a l i z a c a o
54 l ocati onManager = ( Locati onManager ) get Sys t emSer vi ce ( Context .
LOCATION SERVICE) ;
AP
ENDICE A. C
ODIGOS-FONTE 48
55
56 // Def i ne como provedor o GPS do aparel ho
57 St r i ng pr ovi der = Locati onManager . GPS PROVIDER;
58
59 // Obtem a l o c a l i z a c a o ( i medi at ament e )
60 Locati on l o c a t i o n = l ocati onManager . getLastKnownLocati on (
pr ovi der ) ;
61
62 // Mostra o mapa na t e l a
63 updateMap( l o c at i o n ) ;
64
65 // I ns cr eve a at ual a c t i v i t y para r eceber no t i f i c a c o e s de
l o c a l i z a c a o
66 // ( peri odi cament e )
67 l ocati onManager . requestLocati onUpdates ( provi der , 2000 , 10 ,
68 l o c a t i o nLi s t e ne r ) ;
69
70 // Chama a f uncao para conf i gur ar os a l e r t a s de proxi mi dade
71 s et Pr oxi mi t yAl e r t s ( ) ;
72
73 // Cria um over l ay mostrando a pos i cao do d i s p o s i t i v o
74 Li s t <com. googl e . androi d . maps . Overl ay> ove r l ays = myMapView
75 . get Over l ays ( ) ;
76 MyLocati onOverl ay myLocati onOverl ay = new MyLocati onOverl ay (
this ,
77 myMapView) ;
78
79 // Mostra o over l ay com a l o c a l i z a c a o at ual do d i s p o s i t i v o
80 ove r l ays . add( myLocati onOverl ay ) ;
81
82 // Hab i l i t a at ual i z ac oe s do sensor
83 myLocati onOverl ay . enableCompass ( ) ;
84
85 // Hab i l i t a o ponto az ul na t e l a
AP
ENDICE A. C
ODIGOS-FONTE 49
86 myLocati onOverl ay . enabl eMyLocati on ( ) ;
87
88 }
89
90 / I nt e r f ac e Locat i onLi s t ener /
91 private f i nal Loc at i onLi s t e ne r l o c a t i o nLi s t e ne r = new
Loc at i onLi s t e ne r ( ) {
92 public void onLocati onChanged ( Locati on l oc a t i o n ) {
93 updateMap( l o c at i o n ) ;
94 }
95
96 public void onProvi derDi sabl ed ( St r i ng pr ovi der ) {
97 updateMap( nul l ) ;
98 }
99
100 public void onProvi derEnabl ed ( St r i ng pr ovi der ) {
101 }
102
103 public void onStatusChanged ( St r i ng provi der , i nt s t at us ,
Bundle e xt r as ) {
104 }
105 };
106
107 / At ual i z a o mapa com a nova l o c a l i z a c a o /
108 private void updateMap( Locati on l oc at i on ) {
109
110 myLocationText = ( TextView) fi ndVi ewById (R. i d . myLocationText )
;
111
112 St r i ng l at LongSt r i ng ;
113 St r i ng addr e s s St r i ng = Endereco nao encontrado ;
114
115 i f ( l oc a t i on != nul l ) {
116
AP
ENDICE A. C
ODIGOS-FONTE 50
117 // Def i ne a l o c a l i z a c a o at ual
118 Double geoLat = l o c a t i o n . get Lat i t ude ( ) 1E6 ;
119 Double geoLng = l o c at i on . getLongi tude ( ) 1E6 ;
120 GeoPoint poi nt = new GeoPoint ( geoLat . i ntVal ue ( ) , geoLng .
i nt Val ue ( ) ) ;
121
122 // At ual i z a o mapa
123 mapControl l er . s et Cent er ( poi nt ) ;
124
125 // Formata as coordenadas
126 Double l a t = l oc a t i on . get Lat i t ude ( ) ;
127 Double l ng = l o c a t i o n . getLongi tude ( ) ;
128 l at LongSt r i ng = Lat : + F. roundSi xDeci mal s ( l a t ) + ,
Long :
129 + F. roundSi xDeci mal s ( l ng ) ;
130
131 // Mostra as coordenadas na par t e de cima da t e l a
132 myLocationText . setText ( Minhas coordenadas : \ n +
l at LongSt r i ng ) ;
133
134 // Busca o endereco at r aves do GeoCoder
135 // Geocoder gc = new Geocoder ( t hi s , Local e . g e t De f aul t ( ) ) ;
136 Geocoder gc = new Geocoder ( this , Local e . ENGLISH) ;
137 try {
138 Li s t <Address> addr es s es = gc . getFromLocati on ( l at , l ng
, 1) ;
139 St r i ngBui l de r sb = new St r i ngBui l de r ( ) ;
140 i f ( addr es s es . s i z e ( ) > 0) { // se houver pel o menos
um endereco
141 Address addr es s = addr es s es . get ( 0) ;
142
143 // Formata o endereco
144 for ( i nt i = 0; i < addr es s .
getMaxAddressLi neIndex ( ) ; i ++) {
AP
ENDICE A. C
ODIGOS-FONTE 51
145 i f ( i == ( addr es s . getMaxAddressLi neIndex ( )
1) )
146 sb . append ( addr es s . getAddressLi ne ( i ) ) ;
147 el se
148 sb . append ( addr es s . getAddressLi ne ( i ) ) .
append ( ) ;
149 }
150 }
151 addr e s s St r i ng = sb . t oSt r i ng ( ) ;
152 } catch ( IOExcepti on e ) {
153 }
154 } el se {
155 l at LongSt r i ng = Local i z acao nao encontrada ;
156 }
157
158 // Mostra na t e l a o endereco ob t i do at r aves do GeoCoder
159 Toast . makeText ( OndeEstou . this , addr es s St r i ng , Toast .
LENGTHLONG) . show( ) ;
160 }
161
162 / Conf i gura os a l e r t a s de aproximacao /
163 private void s et Pr oxi mi t yAl e r t s ( ) {
164
165 // Al ert a no pront o 1
166 MyProxi mi tyAl ert proxi mi tyAl ertPonto1 = new MyProxi mi tyAl ert (
167 25. 443195 , 49. 280977 , 100 , Al er t a pe r s onal i z ado ) ;
168
169 // Al ert a no pront o 10
170 MyProxi mi tyAl ert proxi mi tyAl ertPonto10 = new MyProxi mi tyAl ert
(
171 25. 442595 , 49. 279444 , 100) ;
172
173 Setup . addProxi mi tyAl ert ( proxi mi tyAl ertPonto1 ) ;
174 Setup . addProxi mi tyAl ert ( proxi mi tyAl ertPonto10 ) ;
AP
ENDICE A. C
ODIGOS-FONTE 52
175
176 // Hab i l i t a os a l e r t a s
177 Setup setup = new Setup ( ) ;
178 setup . s et Pr oxi mi t yAl er t ( get Appl i cat i onCont ext ( ) ,
l ocati onManager ) ;
179
180 }
181
182 / Impl ementacao do metodo ab s t r at o da c l a s s e MapAct i vi t y /
183 protected boolean i s Rout eDi s pl ayed ( ) {
184 return f al se ;
185 }
186
187 }
AP
ENDICE A. C
ODIGOS-FONTE 53
A.2 Setup.java
C odigo-fonte A.2: Classe Setup
1 package org . t hi agos ouza . ondeestou ;
2
3 import j ava . u t i l . ArrayLi st ;
4 import j ava . u t i l . Li s t ;
5
6 import androi d . app . Pendi ngI ntent ;
7 import androi d . content . Broadcast Recei ver ;
8 import androi d . content . Context ;
9 import androi d . content . I nt ent ;
10 import androi d . content . I nt e nt Fi l t e r ;
11 import androi d . gr aphi cs . drawabl e . Drawable ;
12 import androi d . l o c a t i o n . Locati onManager ;
13 import androi d . wi dget . Toast ;
14
15 import com. googl e . androi d . maps . GeoPoint ;
16 import com. googl e . androi d . maps . Overl ay ;
17 import com. googl e . androi d . maps . Overl ayItem ;
18
19 /
20 Cl ase de conf i guracao dos a l e r t a s de proxi mi dade
21 /
22 public cl ass Setup {
23
24 private stati c St r i ng TREASURE PROXIMITY ALERT = org . t hi agos ouza
. alertacommensagem ;
25
26 stati c ArrayLi st <MyProximityAlert> pr oxi mi t yAl er t s = new
ArrayLi st <MyProximi tyAlert >() ;
27
28 public stati c void addProxi mi tyAl ert ( MyProxi mi tyAl ert pa ) {
29 pr oxi mi t yAl er t s . add( pa ) ;
AP
ENDICE A. C
ODIGOS-FONTE 54
30 }
31
32 public void s et Pr oxi mi t yAl er t ( Context context ,
33 Locati onManager l ocati onManager ) {
34
35 Li s t <Overlay> ove r l ays = OndeEstou . myMapView. get Over l ays ( ) ;
36
37 long e xpi r at i on = 1; // nao e s pi r a
38
39 I nt ent i nt e nt = new I nt ent (TREASURE PROXIMITY ALERT) ;
40
41 Pendi ngI ntent pr oxi mi t yI nt ent = Pendi ngI ntent . getBroadcast (
context , 1,
42 i nt ent , 0) ;
43
44 for ( i nt i = 0; i < pr oxi mi t yAl er t s . s i z e ( ) ; i ++) {
45 // para cada a l e r t a de proxi mi dade
46 MyProxi mi tyAl ert paTemp = pr oxi mi t yAl er t s . get ( i ) ;
47
48 Drawable drawabl e = cont ext . get Res our ces ( ) . getDrawabl e (
49 R. drawabl e . androi dmarker ) ;
50
51 MyOverlays tempOverlay = new MyOverlays ( drawabl e ) ;
52
53 // Def i ne um GeoPoint com a l o c a l i z a c a o at ual
54 Double geoLat = paTemp. l a t 1E6 ;
55 Double geoLng = paTemp. l ng 1E6 ;
56 GeoPoint tempPoint = new GeoPoint ( geoLat . i ntVal ue ( ) ,
geoLng
57 . i nt Val ue ( ) ) ;
58
59 Overl ayItem overl ayI t em = new Overl ayItem( tempPoint ,
t e s t e ,
60 t e s t e ) ;
AP
ENDICE A. C
ODIGOS-FONTE 55
61 tempOverlay . addOverl ay ( overl ayI t em ) ;
62 ove r l ays . add( tempOverlay ) ;
63
64 // chama o metodo da c l a s s e Locat i on para adi ci onar os
pont os
65 l ocati onManager . addProxi mi tyAl ert (paTemp. l at , paTemp. l ng ,
66 paTemp. radi us , expi r at i on , pr oxi mi t yI nt ent ) ;
67 }
68
69 // r e g i s t r a o cont ext ( parametro ) para r eceber a l e r t a s de
proxi mi dade
70 I nt e nt Fi l t e r f i l t e r = new I nt e nt Fi l t e r (
TREASURE PROXIMITY ALERT) ;
71 cont ext . r e g i s t e r Re c e i ve r (new Pr oxi mi t yI nt ent Recei ver ( ) ,
f i l t e r ) ;
72
73 }
74
75 / Cl asse para r eceber os i nt e nt s de proxi mi dade /
76 public cl ass Pr oxi mi t yI nt ent Recei ver extends Broadcast Recei ver {
77 @Override
78 public void onRecei ve ( Context context , I nt ent i nt e nt ) {
79 St r i ng key = Locati onManager . KEY PROXIMITY ENTERING;
80
81 Bool ean e nt e r i ng = i nt e nt . getBool eanExtra ( key , f al se ) ;
82
83 i f ( e nt e r i ng )
84 Toast . makeText ( context , Al er t a , Toast .LENGTHLONG) .
show( ) ;
85 }
86 }
87 }
AP
ENDICE A. C
ODIGOS-FONTE 56
A.3 MyProximityAlert.java
C odigo-fonte A.3: Classe MyProximityAlert
1 package org . t hi agos ouza . ondeestou ;
2
3 /
4 Cl ase dos a l e r t a s de proxi mi dade
5 /
6 public cl ass MyProxi mi tyAl ert {
7
8 Double l a t = 0 . 0 ;
9 Double l ng = 0 . 0 ;
10 f l oat r adi us = 0;
11 St r i ng msg = ;
12
13 MyProxi mi tyAl ert ( Double l at , Double l ng , f l oat radi us , St r i ng msg
) {
14
15 thi s . l a t = l a t ;
16 thi s . l ng = l ng ;
17 thi s . r adi us = r adi us ;
18 thi s . msg = msg ;
19 }
20
21 MyProxi mi tyAl ert ( Double l at , Double l ng , f l oat r adi us ) {
22 thi s ( l at , l ng , radi us , ) ;
23 }
24
25 }
AP
ENDICE A. C
ODIGOS-FONTE 57
A.4 AndroidManifest.xml
C odigo-fonte A.4: Arquivo de congurac ao da aplicacao AndroidManifest.xml
1 <?xml version= 1. 0 encodi ng= utf 8?>
2 <mani f es t xml ns: androi d= ht t p: //schemas . androi d . com/apk/ r e s / androi d
3 package= org . t hi agos ouza . ondeestou andr oi d: ver s i onCode=1
androi d: versi onName= 1. 0 >
4 <appl i c at i on andr oi d: i c on=@drawable/ i con a ndr o i d: l a be l= @stri ng
/app name>
5 <a c t i v i t y androi d: name= . OndeEstou a ndr o i d: l a be l= @stri ng /
app name>
6 <i nt ent f i l t e r>
7 <ac t i on androi d: name= androi d . i nt e nt . act i on . MAIN />
8 <cat egor y androi d: name= androi d . i nt e nt . cat egor y .
LAUNCHER />
9 </ i nt ent f i l t e r>
10 </ a c t i v i t y>
11 <usesl i br a r y androi d: name=com. googl e . androi d . maps />
12 </ appl i c at i on>
13 <usessdk androi d: mi nSdkVersi on=3 />
14 <usesper mi s s i on androi d: name= androi d . per mi s s i on . INTERNET />
15 <usesper mi s s i on androi d: name= androi d . per mi s s i on .
ACCESS FINE LOCATION />
16 </ mani f es t>
AP
ENDICE A. C
ODIGOS-FONTE 58
A.5 main.xml
C odigo-fonte A.5: Arquivo de layout main.xml
1 <?xml version= 1. 0 encodi ng= utf 8?>
2 <Li nearLayout xml ns: androi d= ht t p: //schemas . androi d . com/apk/ r e s /
androi d
3 andr oi d: or i e nt at i on= v e r t i c a l andr oi d: l ayout wi dt h= f i l l p a r e n t
4 andr oi d: l ayout he i ght= f i l l p a r e n t >
5
6 <TextView andr oi d: i d=@+i d /myLocationText
7 andr oi d: l ayout wi dt h= f i l l p a r e n t andr oi d: l ayout he i ght=
wrap content
8 andr oi d: t e xt= @stri ng / he l l o />
9
10 <com. googl e . androi d . maps . MapView
11 andr oi d: i d=@+i d /myMapView andr oi d: l ayout wi dt h= f i l l p a r e n t
ENCIAS BIBLIOGR
AFICAS 61
[Meier, 2009] Meier, R. (2009). Android
TM
Application Development. Wiley Publishing,
Indianapolis, Indiana, Estados Unidos.
[Morrill, 2008] Morrill, D. (2008). Android development. http://sites.google.com/
site/io/android-development. Apresentacao no evento Google I/O Sessions Videos
and Slides.
[Rabello, 2009] Rabello, R. R. (2009). Construindo aplicacoes baseadas em localiza cao
no android. WebMobile 2.0, Ed. 20.
[Raub and Hoetmer, 2009] Raub, S. and Hoetmer, K. (2009). Maps APIs and Mobile.
http://sites.google.com/site/io/maps-api-and-mobile. Apresentac ao no evento
Google I/O Sessions Videos and Slides.