Você está na página 1de 4

TUTORIAL Android

Geolocalizao
Postado 20 de setembro de 2012 por Renan Drabach
Se voc deseja explorar os servios de geolocalizao para sua aplicao Android bem
simples comear. Neste tutorial apresentaremos as ferramentas bsicas que a API do
Android disponibiliza para enriquecer seu aplicativo.
Os servios de localizao que o Android disponibiliza para as suas aplicaes so
acessveis atravs das classes do pacote android.location. O componente central deste
framework de localizao o servio de sistema LocationManager que fornece a API
responsvel por determinar a localizao geogrfica.
Assim como outros servios de sistema, no possvel instanciar diretamente
oLocationManager. A utilizao dele dever ser a partir de uma requisio da sua instncia
pelo sistema da seguinte forma:
1. LocationManager locationManager =
2. (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

Este mtodo retornar uma instncia de um LocationManager que permitir que sua
aplicao faa 3 coisas:
1. Consultar a lista de todos os LocationProviders para o ltimo local conhecido do usurio;
2. Registrar e desregistrar atualizaes peridicas da localizao do usurio atravs de um
provider (especificado por um critrio ou nome);
3. Registrar e desregistrar um determinado Intent para ser disparado se o dispositivo entrar
nas proximidades de certa latitude/longitude (especificada pelo raio em metros).
Na maioria dos casos os LocationProviders disponveis sero:
LocationProvider Fonte Descrio Preciso
Consumo
de bateria
GPS_PROVIDER
GPS,
AGPS
Utiliza o receptor GPS do
dispositivo para determinar
a localizao via satlites 2-20m Alto
NETWORK_PROVIDER
AGPS,
CellID,
WiFi
MACID
Utiliza a rede mvel ou Wi-
Fi para determinar a melhor
localizao 60-500m
Mdio-
baixo
PASSIVE_PROVIDER CellID, Permite participar de ~1,6km Baixo
WiFi
MACID
atualizaes da localizao
atravs de outros
componentes para preservar
a energia da bateria
Quer saber quais so os providers disponveis?
Ento utilize o mtodo android.location.LocationManager.getAllProviders() que retornar
uma lista dos nomes de todos os providers conhecidos, includos aqueles que no possuem
permisso de acesso e os atualmente desabilitados.
1. List matchingProviders = locationManager.getAllProviders();

Permisses de usurio
Para receber as atualizaes de geolocalizaes necessrio adicionar
noAndroidManifest algumas permisses, dependendo do LocationProvider a ser utilizado:
android.permission LocationProvider
ACCESS_FINE_LOCATION
GPS_PROVIDER
NETWORK_PROVIDER
PASSIVE_PROVIDER
ACCESS_COARSE_LOCATION NETWORK_PROVIDER
Requisitando atualizaes de localizao
Para realizar a captura dos dados de localizao ser necessrio registrar um listener para
receber essas atualizaes e repass-las aplicao. Dever ser chamado o
mtodorequestLocationUpdates passando o nome do Location Provider e
o LocationListenerque responsvel por implementar os mtodos que sero chamados
quando mudar a localizao do usurio ou o status do servio. Para demonstar melhor ser
apresentado o trecho de cdigo correspondente:
1. // Adquire a referncia ao Location Manager
2. LocationManager locationManager = (LocationManager) this
3. .getSystemService(Context.LOCATION_SERVICE);
4.
5. // Define o listener que responde s atualizaes de localizao
6. LocationListener locationListener = new LocationListener() {
7.
8. @Override
9. public void onLocationChanged(Location location) {
10. // Chamado quando uma nova localizao encontrada
11.
12. location.getLatitude();// Latitude coletada
13. location.getLongitude();// Longitude coletada
14. }
15.
16. @Override
17. public void onStatusChanged(String provider, int status, Bundle extras) { }
18.
19. @Override
20. public void onProviderEnabled(String provider) { }
21.
22. @Override
23. public void onProviderDisabled(String provider) { }
24. };
25.
26. // Registra o listener com o Location Manager desejado para receber as atualizaes
27. locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
locationListener);

Para que a aplicao no gere um consumo demasiado de energia da bateria, podemos
remover o listener para evitar que fique recebendo atualizaes.
1. locationManager.removeUpdates(locationListener);

Existem algumas formas de melhorar e agilizar a captura de informaes de localizao
pela sua aplicao. Utilizando o objeto Criteria, por exemplo, uma maneira de obter o
melhor provider.
1. // Define um critrio para selecionar o location provider
2. Criteria criteria = new Criteria();
3. provider = locationManager.getBestProvider(criteria, false);
4.
5. // Retorna a localizao com a data da ltima localizao conhecida
6. Location location = locationManager.getLastKnownLocation(provider);

Voc quer utilizar um locationProvider mas ele est desabilitado?
Se, por exemplo, a sua aplicao precisa utilizar dados do GPS para obter uma localizao
mais precisa, possvel testar se ela est disponvel atravs do mtodoisProviderEnabled().
Caso esteja desabilitada poder ser feita uma requisio ao usurio atravs de um
novo I ntent para habilit-la. Observe o cdigo a seguir:
1. LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
2.
3. // Verifica se o GPS est ativo
4. boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
5.
6. // Caso no esteja ativo abre um novo dilogo com as configuraes para
7. // realizar se ativamento
8. if (!enabled) {
9. Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
10. startActivity(intent);
11. }

Apresentamos neste post algumas funes bsicas da API do Android com o objetivo de
mostrar o funcionamento desse framework de geolocalizao e utiliz-lo na sua aplicao.
A partir daqui explore as funcionalidades dessa ferramenta e descubra quais sero mais
teis para a sua aplicao.
Para aprofundar o conhecimento sobre a API de geolocalizao e visualizar algumas
estratgias de captura de localizao indicamos o link
http://developer.android.com/guide/topics/location/strategies.html.

Você também pode gostar