Eu criei um pequeno aplicativo com descrição passo a passo para obter as coordenadas GPS da localização atual.
O código-fonte completo do exemplo está nas coordenadas Obter localização atual, Nome da cidade - no Android .
Veja como funciona:
Tudo o que precisamos fazer é adicionar essa permissão no arquivo de manifesto:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
E crie uma instância do LocationManager assim:
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Verifique se o GPS está ativado ou não.
E, em seguida, implemente LocationListener e obtenha coordenadas:
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
Aqui está o código de exemplo para fazer isso
/*---------- Listener class to get coordinates ------------- */
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
editLocation.setText("");
pb.setVisibility(View.INVISIBLE);
Toast.makeText(
getBaseContext(),
"Location changed: Lat: " + loc.getLatitude() + " Lng: "
+ loc.getLongitude(), Toast.LENGTH_SHORT).show();
String longitude = "Longitude: " + loc.getLongitude();
Log.v(TAG, longitude);
String latitude = "Latitude: " + loc.getLatitude();
Log.v(TAG, latitude);
/*------- To get city name from coordinates -------- */
String cityName = null;
Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
List<Address> addresses;
try {
addresses = gcd.getFromLocation(loc.getLatitude(),
loc.getLongitude(), 1);
if (addresses.size() > 0) {
System.out.println(addresses.get(0).getLocality());
cityName = addresses.get(0).getLocality();
}
}
catch (IOException e) {
e.printStackTrace();
}
String s = longitude + "\n" + latitude + "\n\nMy Current City is: "
+ cityName;
editLocation.setText(s);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
}
adresses
linha que começa comcityName =
falhará com uma exceção. Usar aparelho fixaria isso.getLastKnownLocation()
é um local mais "obsoleto" - por que isso? A chamadagetLastKnownLocation()
não recebe a última leitura GPS do GPS do telefone?Aqui estão informações adicionais para outras respostas.
Como o Android tem
você pode se registrar nos dois e começar a buscar eventos a partir
onLocationChanged(Location location)
de dois ao mesmo tempo. Por enquanto, tudo bem. Agora, a pergunta: precisamos de dois resultados ou devemos tirar o melhor. Como eu sei, osGPS_PROVIDER
resultados têm melhor precisão do queNETWORK_PROVIDER
.Vamos definir o
Location
campo:Antes de começarmos a ouvir a alteração de local , implementaremos o seguinte método. Este método retorna o último local conhecido, entre o GPS e o da rede. Para este método, o mais recente é o melhor.
Sempre que recuperarmos um novo local, o compararemos com o resultado anterior.
Eu adiciono um novo método para
onLocationChanged
:fonte
private Location currentBestLocation = null;
e adicionar `makeUseOfNewLocation (localização);` para onLocationChanged (..) MétodoVocê pode encontrar a localização por
GPS_PROVIDER or NETWORK_PROVIDER
.Visão geral dos serviços de localização no Android.
Aqui está um exemplo que tenta encontrar a localização usando GPS. Se o seu GPS não estiver disponível, tente usar a rede para encontrar a localização.
GPSTracker.java
Activity -AndroidGPSTrackingActivity.java
Layout- main.xml
AndroidManifest.xml
fonte
Já existem muitas respostas, mas quero mostrar a maneira mais recente de obter localização usando a API do Google, para que novos programadores possam usar o novo método:
Eu escrevi um tutorial detalhado sobre a localização atual no android no meu blog demonuts.com Você também pode encontrar o código fonte completo desenvolvido com o android studio.
Primeiro, coloque isso no arquivo gradle
depois implemente as interfaces necessárias
declarar instâncias
coloque isso
onCreate()
Por fim, substitua os métodos necessários
Não se esqueça de iniciar o GPS no seu dispositivo antes de executar o aplicativo.
fonte
mLocation
sempre dá nulo. Tentei o mesmo como mencionadocompile 'com.google.android.gms:play-services-location:11.0.4'
vez de adicionar todos os serviços do Google Play ao seu aplicativo.Como não gostei do código nas outras respostas, aqui está minha solução simples. Esta solução deve ser usada em uma Atividade ou Serviço para rastrear o local. Ele garante que nunca retorne dados muito antigos, a menos que você solicite explicitamente dados antigos. Ele pode ser executado no modo de retorno de chamada para obter atualizações à medida que as recebemos, ou no modo de pesquisa para pesquisar as informações mais recentes.
Interface genérica LocationTracker. Permite ter vários tipos de rastreadores de localização e conectar facilmente o apropriado:
ProviderLocationTracker - essa classe rastreará a localização do GPS ou da REDE.
O é o FallbackLocationTracker, que rastreará pelo GPS e pela REDE e usará qualquer local mais preciso.
Como os dois implementam a interface LocationTracker, você pode facilmente mudar de idéia sobre qual usar. Para executar a classe no modo de pesquisa, basta chamar start (). Para executá-lo no modo de atualização, chame start (Listener).
Também dê uma olhada no meu post no código
fonte
FallbackLocationTracker fallbackLocationTracker = new FallbackLocationTracker(mContext); fallbackLocationTracker.start(); if (fallbackLocationTracker.hasLocation()) { return fallbackLocationTracker.getLocation(); }
Obter localização de GPS por -
fonte
location.getSpeed()
retorna a velocidade em metros / s (não metros / min).Você precisa usar as mais recentes / mais recentes
Basicamente, o que você precisa fazer é:
Então
para a localização mais precisa e confiável. Veja meu post aqui:
https://stackoverflow.com/a/33599228/2644905
Não use LocationListener que não é preciso e que atrasou a resposta. Para ser honesto, isso é mais fácil de implementar. Leia também a documentação: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient
fonte
Eu espero que isso te ajude...
fonte
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Agora que os serviços de localização do Google Play estão aqui, recomendo que os desenvolvedores comecem a usar o novo provedor de localização com fusão. Você achará mais fácil de usar e mais preciso. Assista ao vídeo do Google I / O além do ponto azul: novos recursos no local do Android pelos dois caras que criaram a nova API de serviços de localização do Google Play.
Eu tenho trabalhado com APIs de localização em várias plataformas móveis, e acho que o que esses dois caras fizeram foi realmente revolucionário. Ele se livrou de uma enorme quantidade de complexidades de usar os vários provedores. O Stack Overflow está repleto de perguntas sobre qual provedor usar, se deve usar o último local conhecido, como definir outras propriedades no LocationManager, etc. Essa nova API que eles criaram remove a maioria dessas incertezas e torna os serviços de localização um prazer para usar.
Escrevi um aplicativo para Android que periodicamente obtém o local usando os serviços de localização do Google Play e envia o local para um servidor da Web onde está armazenado em um banco de dados e pode ser visualizado no Google Maps . Escrevi o software cliente (para Android, iOS, Windows Phone e Java ME ) e o software servidor (para ASP.NET e SQL Server ou PHP e MySQL ). O software é escrito no idioma nativo em cada plataforma e funciona corretamente em segundo plano em cada uma. Por fim, o software possui a licença MIT . Você pode encontrar o cliente Android aqui:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
fonte
Mais simples que você pode encontrar
fonte
LocationManager é uma classe que fornece métodos internos para obter o último local conhecido
LocationManager locationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);
Existem dois tipos de provedor de GPS e rede
Se o objeto de localização for nulo, não tente chamar o método s abaixo
getLatitude and getLongitude is methods which returns double values
fonte
Para obter atualizações de local, é necessário muito código de bolierplate no Android. Você precisa cuidar de
Para facilitar todas essas etapas, criei o Android-EasyLocation (pequena biblioteca Android) que cuidará de tudo isso e você poderá se concentrar na lógica de negócios.
Tudo que você precisa é estender o EasyLocationActivity e isso
ou
Aplicativo de exemplo do Google Checkout e etapas necessárias aqui em https://github.com/akhgupta/Android-EasyLocation
fonte
Fiz um projeto a partir do qual podemos obter a localização exata usando os serviços do Google Play, fornecedores de GPS e de rede. Este projeto pode ser encontrado aqui .
A estratégia para encontrar a melhor localização é que primeiro obtenha a localização nos serviços Google Play, se a localização for encontrada e verifique se o tempo está melhor ou não, se a localização encontrada for nula, reinicie os serviços Google Play e tente buscar a localização na API de localização do Android. Registre o local nos ouvintes de mudança e, sempre que encontrar um local melhor, a chamada de retorno o retornará à atividade principal.
É muito simples de usar e implementar em código apenas duas classes que precisamos para isto é incorporar
LocationManagerInterface
eSmartLocationManager
,LocationActivity
está implementando a interface e usando SmartLocationManager para buscar localização.aqui está a classe do gerenciador de localização
podemos usá-lo com atividade ou um fragmento, aqui estou usando-o com atividade
Espero que ajude, se você puder sugerir alguma melhoria, por favor publique no git . Obrigado.
fonte
GoogleSamples tem um exemplo detalhado usando o FusedLocationProviderApi mais recente. Infelizmente, as respostas mais votadas estão desatualizadas.
Siga os exemplos abaixo para implementar os Serviços de Localização usando o FusedLocationProviderApi
https://github.com/googlesamples/android-play-location/tree/master/LocationUpdates
https://github.com/googlesamples/android-play-location/blob/master/LocationUpdates/app/src/main/java/com/google/android/gms/location/sample/locationupdates/MainActivity.java
fonte
Se você estiver criando novos projetos de localização para Android, use o novo Google Play serviços de localização do . É muito mais preciso e muito mais simples de usar.
Estou trabalhando em um projeto de rastreador GPS de código aberto , o GpsTracker, há vários anos. Eu o atualizei recentemente para lidar com atualizações periódicas de telefones celulares Android, iOS, Windows Phone e Java ME . É totalmente funcional e faz o que você precisa e possui a Licença MIT .
O projeto Android no GpsTracker usa os novos serviços do Google Play e também existem duas pilhas de servidores ( ASP.NET e PHP ) para permitir o rastreamento desses telefones.
fonte
Para apenas verificar a localização, você pode usar o seguinte código. Você pode colocá-lo no seu onStart () da atividade principal e exibir a caixa de diálogo de alerta se o retorno for falso.
fonte
Tenho uma localização muito precisa usando o FusedLocationProviderClient
( são necessários serviços do Google Play )
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
'com.google.android.gms: play-services-location: 15.0.0'
fonte
A melhor maneira de buscar o local está abaixo
fonte
Publiquei uma pequena biblioteca que pode facilitar a obtenção de dados de localização no Android, além de cuidar das permissões de tempo de execução do Android M.
Você pode conferir aqui: https://github.com/julioromano/RxLocation e usá-lo ou seu código-fonte como exemplos para sua implementação.
fonte
Localização simples Escreva código no método On Location
fonte
Vou recomendar o uso da Biblioteca de Localização Inteligente
Muito simples de usar e envolve bem a lógica de localização.
Para iniciar o serviço de localização:
Se você deseja apenas obter um único local (não periódico), basta usar o modificador oneFix. Exemplo:
fonte
Maneira simples e fácil,
Obtenha a localização usando https://github.com/sachinvarma/EasyLocation .
Etapa 1: basta ligar
timeInterval -> setInterval (long) (inMilliSeconds) significa - defina o intervalo em que você deseja obter os locais.
rapidTimeInterval -> setFastestInterval (long) (inMilliSeconds) significa - se um local estiver disponível mais cedo, você poderá obtê-lo. (ou seja, outro aplicativo está usando os serviços de localização).
runAsBackgroundService = True -> (O serviço será executado em segundo plano e será atualizado com freqüência (de acordo com o timeInterval e o quickTimeInterval)) runAsBackgroundService = False -> (o serviço será getDestroyed após uma atualização de local bem-sucedida)
Etapa 2: Prepare assinantes do EventBus: declare e anote seu método de inscrição, opcionalmente, especifique um modo de encadeamento:
por exemplo:
Isso é tudo.
Espero que ajude alguém no futuro.
fonte
Abril 2020
Etapas completas para obter a localização atual e evitar a nulidade da Última Localização Conhecida.
De acordo com a documentação oficial , Last Known Location poderia ser Null no caso de:
Nesse caso, você deve solicitarLocationUpdates e receber o novo local no LocationCallback .
Nas etapas a seguir, seu último local conhecido nunca é nulo.
Pré-requisito: biblioteca EasyPermission
Etapa 1: no arquivo de manifesto, adicione esta permissão
Passo 2:
Etapa 3: Crie as funções necessárias para serem chamadas no onCreate ()
Passo 4:
Manipule retornos de chamada em onActivityResult () depois de garantir que o local seja aberto ou que o usuário aceite abri-lo.
Etapa 5: obter o último local conhecido do FusedClientApi
Espero que isso ajude.
Feliz codificação 🤓
fonte