Provedores de localização Android - GPS ou provedor de rede?

128

No meu aplicativo, gostaria de determinar a localização atual do usuário. No entanto, tenho algumas perguntas a esse respeito:

  1. Existem diferentes provedores de localização, qual é o mais preciso? O provedor de GPS ou o provedor de rede ?

  2. Até que ponto os provedores disponíveis diferem? Como eles funcionam?

  3. Você poderia me fornecer alguns trechos de código ou tutoriais sobre como começar a implementar a funcionalidade GPS no meu aplicativo?

Nenhum homem
fonte
18
Vote para reabrir - a pergunta é boa e a resposta fornecida é útil. A resposta também está desatualizada, já que agora existe o Provedor de localização fundida - a abertura da pergunta permitiria que ela fosse atualizada.
Richard Le Mesurier

Respostas:

281

Existem 3 fornecedores de localização no Android.

Eles são:

gps -> (GPS, AGPS): Nome do provedor de localização GPS. Este provedor determina a localização usando satélites. Dependendo das condições, esse provedor pode demorar um pouco para retornar uma correção de local. Requer a permissão android.permission.ACCESS_FINE_LOCATION.

rede -> (AGPS, CellID, WiFi MACID): Nome do provedor de localização de rede. Este provedor determina a localização com base na disponibilidade de torre de celular e pontos de acesso Wi-Fi. Os resultados são recuperados por meio de uma pesquisa de rede. Requer uma das permissões android.permission.ACCESS_COARSE_LOCATION ou android.permission.ACCESS_FINE_LOCATION.

passivo -> (CellID, WiFi MACID): um provedor de localização especial para receber locais sem realmente iniciar uma correção de local. Esse provedor pode ser usado para receber passivamente atualizações de locais quando outros aplicativos ou serviços solicitá-los sem realmente solicitar os locais. Este provedor retornará locais gerados por outros fornecedores. Requer a permissão android.permission.ACCESS_FINE_LOCATION, embora se o GPS não estiver ativado, esse provedor poderá retornar apenas correções grosseiras. É o que o Android chama esses provedores de localização; no entanto, as tecnologias subjacentes para fazer essas coisas funcionarem são mapeadas para o conjunto específico de recursos fornecidos por hardware e telecomunicações (serviço de rede).

A melhor maneira é usar o provedor “rede” ou “passivo” primeiro e, em seguida, o fallback em “gps” e, dependendo da tarefa, alternar entre provedores. Isso abrange todos os casos e fornece um serviço de denominador comum mais baixo (no pior caso) e um ótimo serviço (no melhor caso).

insira a descrição da imagem aqui

Artigo Referência: Android Location Providers - gps, network, passive Por Nazmul Idris

Referência do código: https://stackoverflow.com/a/3145655/28557

-----------------------Atualizar-----------------------

Agora o Android tem provedor de localização fundida

O provedor de localização fundida gerencia de maneira inteligente a tecnologia de localização subjacente e fornece a melhor localização de acordo com suas necessidades. Simplifica as maneiras pelas quais os aplicativos obtêm a localização atual do usuário com maior precisão e menor consumo de energia

O provedor de localização fundida fornece três maneiras de buscar a localização

  1. Última localização: use quando quiser saber a localização atual uma vez.
  2. Solicitar local usando o Ouvinte: use quando o aplicativo estiver na tela / front-end e exigir local contínuo.
  3. Solicitar local usando intenção pendente: use quando o aplicativo for em segundo plano e exija a localização contínua.

Referências :

Site oficial: http://developer.android.com/google/play-services/location.html

Exemplo de provedor de localização fundida: GIT: https://github.com/kpbird/fused-location-provider-example

http://blog.lemberg.co.uk/fused-location-provider

-------------------------------------------------- ------

Vinayak Bevinakatti
fonte
2
Observe que também há o provedor do localizador fundido do Google Play Services que pode ser usado.
Richard Le Mesurier
É possível criar seu próprio provedor de localização personalizado? android.permission.INSTALL_LOCATION_PROVIDER está assinado ou o sistema significa que devo instalar um no dispositivo raiz, não?
JohnyTex
1
O provedor de localização fundida está disponível apenas para API> = 19. Ainda precisamos seguir o procedimento antigo para o dispositivo executando versões mais antigas, certo?
Shobhit Puri
existe algum código de amostra / API existente que procure a localização do GPS e volte ao provedor de rede depois de algum tempo, se o GPS não conseguir buscar a localização? ou deve ser tratado no código por alguma lógica de timer?
Jrhamza
Provedor passivo "" "Este provedor pode ser usado para receber passivamente atualizações de locais quando outros aplicativos ou serviços solicitá-los sem solicitar os locais você mesmo." ""
nurisezgin 08/08/2015
7

O GPS geralmente é mais preciso que a rede, mas às vezes o GPS não está disponível; portanto, você pode precisar alternar entre os dois.

Um bom começo pode ser o site de desenvolvimento do Android. Eles tinham uma seção dedicada a determinar a localização do usuário e possui todas as amostras de código necessárias.

http://developer.android.com/guide/topics/location/obtaining-user-location.html

Otra
fonte
@Noman você deseja obter a sua localização longitude e latitude?
Nikunj Patel
@ Escorpião, na verdade, eu queria saber qual opção é melhor entre o NETWORK PROViDER & GPS PROVIDER. . .Otra me enviar um link como uma resposta à minha pergunta que ahs me ajudou muito ... agora eu estou usando Rede Credenciada meu aplicativo :-)
Noman
3

Há algumas ótimas respostas mencionadas aqui. Outra abordagem que você poderia adotar seria usar alguns SDKs gratuitos disponíveis online, como Atooma, tranql e Neura, que podem ser integrados ao seu aplicativo Android (leva menos de 20 minutos para integrar). Além de fornecer a localização exata do seu usuário, também pode fornecer boas informações sobre as atividades do usuário. Além disso, alguns deles consomem menos de 1% da sua bateria

johndaly
fonte
1
posso obter referências ao sdk que você está mencionando?
Kishore Relangi