Geolocalização Desenvolvida
Por: Turma Ads • 7/10/2016 • Resenha • 1.595 Palavras (7 Páginas) • 352 Visualizações
TUTORIAL – Android – Geolocalização
Postado 20 de setembro de 2012 por Renan Drabach
Se você deseja explorar os serviços de geolocalização para sua aplicação Android é bem simples começar. Neste tutorial apresentaremos as ferramentas básicas que a API do Android disponibiliza para enriquecer seu aplicativo.
Os serviços de localização que o Android disponibiliza para as suas aplicações são acessíveis através das classes do pacote android.location. O componente central deste framework de localização é o serviço de sistema LocationManager que fornece a API responsável por determinar a localização geográfica.
Assim como outros serviços de sistema, não é possível instanciar diretamente o LocationManager. A utilização dele deverá ser a partir de uma requisição da sua instância pelo sistema da seguinte forma:
- LocationManager locationManager =
- (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Este método retornará uma instância de um LocationManager que permitirá que sua aplicação faça 3 coisas:
1. Consultar a lista de todos os LocationProviders para o último local conhecido do usuário;
2. Registrar e desregistrar atualizações periódicas da localização do usuário através de um provider (especificado por um critério 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 disponíveis serão:
LocationProvider | Fonte | Descrição | Precisão | Consumo de bateria |
GPS_PROVIDER | GPS, AGPS | Utiliza o receptor GPS do dispositivo para determinar a localização via satélites | 2-20m | Alto |
NETWORK_PROVIDER | AGPS, CellID, WiFi MACID | Utiliza a rede móvel ou Wi-Fi para determinar a melhor localização | 60-500m | Médio-baixo |
PASSIVE_PROVIDER | CellID, WiFi MACID | Permite participar de atualizações da localização através de outros componentes para preservar a energia da bateria | ~1,6km | Baixo |
Quer saber quais são os providers disponíveis?
Então utilize o método android.location.LocationManager.getAllProviders() que retornará uma lista dos nomes de todos os providers conhecidos, incluídos aqueles que não possuem permissão de acesso e os atualmente desabilitados.
- List matchingProviders = locationManager.getAllProviders();
Permissões de usuário
Para receber as atualizações de geolocalizações é necessário adicionar no AndroidManifest algumas permissões, dependendo do LocationProvider a ser utilizado:
android.permission | LocationProvider |
ACCESS_FINE_LOCATION | GPS_PROVIDER |
ACCESS_COARSE_LOCATION | NETWORK_PROVIDER |
Requisitando atualizações de localização
Para realizar a captura dos dados de localização será necessário registrar um listener para receber essas atualizações e repassá-las à aplicação. Deverá ser chamado o método requestLocationUpdates passando o nome do Location Provider e o LocationListener que é responsável por implementar os métodos que serão chamados quando mudar a localização do usuário ou o status do serviço. Para demonstar melhor será apresentado o trecho de código correspondente:
- // Adquire a referência ao Location Manager
- LocationManager locationManager = (LocationManager) this
- .getSystemService(Context.LOCATION_SERVICE);
- // Define o listener que responde às atualizações de localização
- LocationListener locationListener = new LocationListener() {
- @Override
- public void onLocationChanged(Location location) {
- // Chamado quando uma nova localização é encontrada
- location.getLatitude();// Latitude coletada
- location.getLongitude();// Longitude coletada
- }
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) { }
- @Override
- public void onProviderEnabled(String provider) { }
- @Override
- public void onProviderDisabled(String provider) { }
- };
- // Registra o listener com o Location Manager desejado para receber as atualizações
- locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Para que a aplicação não gere um consumo demasiado de energia da bateria, podemos remover o listener para evitar que fique recebendo atualizações.
- locationManager.removeUpdates(locationListener);
Existem algumas formas de melhorar e agilizar a captura de informações de localização pela sua aplicação. Utilizando o objeto Criteria, por exemplo, é uma maneira de obter o melhor provider.
- // Define um critério para selecionar o location provider
- Criteria criteria = new Criteria();
- provider = locationManager.getBestProvider(criteria, false);
- // Retorna a localização com a data da última localização conhecida
- Location location = locationManager.getLastKnownLocation(provider);
Você quer utilizar um locationProvider mas ele está desabilitado?
Se, por exemplo, a sua aplicação precisa utilizar dados do GPS para obter uma localização mais precisa, é possível testar se ela está disponível através do método isProviderEnabled(). Caso esteja desabilitada poderá ser feita uma requisição ao usuário através de um novo Intent para habilitá-la. Observe o código a seguir:
...