Fournisseurs de localisation Android - GPS ou fournisseur de réseau?

128

Dans mon application, je voudrais déterminer l'emplacement actuel de l'utilisateur. J'ai cependant quelques questions à cet égard:

  1. Il existe différents fournisseurs de localisation, lequel est le plus précis? Le fournisseur de GPS ou le fournisseur de réseau ?

  2. Dans quelle mesure ces fournisseurs disponibles diffèrent-ils? Comment fonctionnent-ils?

  3. Pourriez-vous s'il vous plaît me fournir des extraits de code ou des didacticiels sur la façon de commencer à implémenter la fonctionnalité GPS dans mon application?

Personne
la source
18
Votez pour la réouverture - la question est bonne et la réponse fournie est utile. La réponse est également obsolète car il existe maintenant le fournisseur d'emplacement fusionné - l'ouverture de la question lui permettrait d'être mise à jour.
Richard Le Mesurier

Réponses:

281

Il existe 3 fournisseurs de localisation sur Android.

Elles sont:

gps -> (GPS, AGPS): nom du fournisseur de localisation GPS. Ce fournisseur détermine l'emplacement à l'aide de satellites. Selon les conditions, ce fournisseur peut prendre un certain temps pour renvoyer un correctif de localisation. Nécessite l'autorisation android.permission.ACCESS_FINE_LOCATION.

network -> (AGPS, CellID, WiFi MACID): Nom du fournisseur de localisation réseau. Ce fournisseur détermine l'emplacement en fonction de la disponibilité de la tour cellulaire et des points d'accès WiFi. Les résultats sont récupérés au moyen d'une recherche réseau. Nécessite l'une des autorisations android.permission.ACCESS_COARSE_LOCATION ou android.permission.ACCESS_FINE_LOCATION.

passif -> (CellID, WiFi MACID): Un fournisseur de localisation spécial pour recevoir des emplacements sans réellement lancer un correctif de localisation. Ce fournisseur peut être utilisé pour recevoir passivement des mises à jour de localisation lorsque d'autres applications ou services les demandent sans en faire la demande vous-même. Ce fournisseur renverra les emplacements générés par d'autres fournisseurs. Nécessite l'autorisation android.permission.ACCESS_FINE_LOCATION, bien que si le GPS n'est pas activé, ce fournisseur peut uniquement renvoyer des correctifs grossiers. C'est ce qu'Android appelle ces fournisseurs de localisation, cependant, les technologies sous-jacentes pour faire fonctionner ces éléments sont mappées à l'ensemble spécifique de capacités fournies par le matériel et les opérateurs de télécommunications (service réseau).

Le meilleur moyen est d'utiliser d'abord le fournisseur «réseau» ou «passif», puis de se replier sur le «gps» et, selon la tâche, de basculer entre les fournisseurs. Cela couvre tous les cas et fournit un service au plus petit dénominateur commun (dans le pire des cas) et un excellent service (dans le meilleur des cas).

entrez la description de l'image ici

Référence de l'article: Fournisseurs de localisation Android - GPS, réseau, passif Par Nazmul Idris

Référence de code: https://stackoverflow.com/a/3145655/28557

-----------------------Mettre à jour-----------------------

Maintenant, Android a le fournisseur de localisation fusionné

Le fournisseur d'emplacement fusionné gère intelligemment la technologie de localisation sous-jacente et vous offre le meilleur emplacement en fonction de vos besoins. Il simplifie les moyens pour les applications d'obtenir l'emplacement actuel de l'utilisateur avec une précision améliorée et une consommation d'énergie réduite

Le fournisseur d'emplacement fusionné offre trois façons de récupérer l'emplacement

  1. Dernier emplacement: à utiliser lorsque vous souhaitez connaître une fois l'emplacement actuel.
  2. Demander la localisation à l'aide de l'écouteur: à utiliser lorsque l'application est à l'écran / frontend et nécessite une localisation continue.
  3. Demande d'emplacement à l'aide de l'intention en attente: à utiliser lorsque l'application en arrière-plan et nécessite une localisation continue.

Références :

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

Exemple de fournisseur d'emplacement fusionné: GIT: https://github.com/kpbird/fused-location-provider-example

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

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

Vinayak Bevinakatti
la source
2
Notez qu'il existe également le fournisseur de Google Play Services Fused Locator que l'on peut utiliser.
Richard Le Mesurier
Est-il possible de créer votre propre fournisseur de localisation personnalisé? android.permission.INSTALL_LOCATION_PROVIDER est signé ou système, ce qui signifie que je devrais pouvoir en installer un sur un appareil enraciné, non?
JohnyTex
1
Le fournisseur d'emplacement fusionné n'est disponible que pour l'API> = 19. Nous devons toujours suivre l'ancienne procédure pour les appareils exécutant des versions plus anciennes, n'est-ce pas?
Shobhit Puri
Existe-t-il un exemple de code / API existant qui recherche l'emplacement GPS et revient au fournisseur de réseau après un certain temps, si le GPS ne parvient pas à récupérer l'emplacement? ou devrait-il être traité dans le code par une logique de minuterie?
jrhamza
Fournisseur passif "" "Ce fournisseur peut être utilisé pour recevoir passivement des mises à jour de localisation lorsque d'autres applications ou services les demandent sans réellement demander les emplacements vous-même." ""
nurisezgin
7

Le GPS est généralement plus précis que le réseau, mais parfois le GPS n'est pas disponible, vous devrez donc peut-être basculer entre les deux.

Un bon début pourrait être de regarder le site de développement Android. Ils avaient une section dédiée à la détermination de l'emplacement de l'utilisateur et il contient tous les exemples de code dont vous avez besoin.

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

Otra
la source
@Noman voulez-vous obtenir la longitude et la latitude de votre emplacement?
Nikunj Patel
@Scorpio je voulais en fait savoir quelle option est la meilleure parmi le FOURNISSEUR DE RÉSEAU ET LE FOURNISSEUR GPS. . .Otra m'envoie un lien en réponse à ma question qui m'a beaucoup aidé ... maintenant j'utilise NETWORK PROVIDER dans mon application :-)
Noman
3

Il y a quelques bonnes réponses mentionnées ici. Une autre approche que vous pourriez adopter serait d'utiliser des SDK gratuits disponibles en ligne comme Atooma, tranql et Neura, qui peuvent être intégrés à votre application Android (cela prend moins de 20 minutes à intégrer). En plus de vous donner l'emplacement précis de votre utilisateur, il peut également vous donner de bonnes informations sur les activités de votre utilisateur. De plus, certains d'entre eux consomment moins de 1% de votre batterie

johndaly
la source
1
puis-je obtenir des références au SDK que vous mentionnez?
Kishore Relangi