J'ai créé une petite application avec une description étape par étape pour obtenir les coordonnées GPS de l'emplacement actuel.
Un exemple de code source complet se trouve dans Obtenir les coordonnées de l'emplacement actuel, Nom de la ville - dans Android .
Regarde comment ça marche:
Tout ce que nous devons faire est d'ajouter cette autorisation dans le fichier manifeste:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Et créez une instance LocationManager comme ceci:
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Vérifiez si le GPS est activé ou non.
Et puis implémentez LocationListener et obtenez les coordonnées:
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
Voici l'exemple de code pour le faire
/*---------- 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
la ligne commençant parcityName =
échouera avec une exception. Utiliser des accolades le corrigerait.getLastKnownLocation()
que c'était un endroit plus «périmé» - pourquoi? L'appelgetLastKnownLocation()
n'obtient- il pas la dernière lecture GPS du GPS du téléphone?Voici des informations supplémentaires pour d'autres réponses.
Depuis Android a
vous pouvez vous inscrire aux deux et commencer à récupérer des événements à partir
onLocationChanged(Location location)
de deux en même temps. Jusqu'ici tout va bien. Maintenant, la question: avons-nous besoin de deux résultats ou devons-nous prendre le meilleur? Comme je le sais, lesGPS_PROVIDER
résultats ont une meilleure précision queNETWORK_PROVIDER
.Définissons le
Location
champ:Avant de commencer à écouter le changement d' emplacement , nous implémenterons la méthode suivante. Cette méthode renvoie le dernier emplacement connu, entre le GPS et celui du réseau. Pour cette méthode, le plus récent est le meilleur.
Chaque fois que nous récupérons un nouvel emplacement, nous le comparons avec notre résultat précédent.
J'ajoute une nouvelle méthode à
onLocationChanged
:la source
private Location currentBestLocation = null;
et d'ajouter `makeUseOfNewLocation (location);` à la méthode onLocationChanged (..)Vous pouvez trouver l'emplacement soit par
GPS_PROVIDER or NETWORK_PROVIDER
.Vue d'ensemble des services de localisation dans Android.
Voici un exemple qui essaie de trouver l'emplacement à l'aide du GPS. Si votre GPS n'est pas disponible, essayez d'utiliser le réseau pour trouver l'emplacement.
GPSTracker.java
Activity -AndroidGPSTrackingActivity.java
Layout- main.xml
AndroidManifest.xml
la source
Il y a déjà beaucoup de réponses, mais je veux montrer la dernière façon d'obtenir l'emplacement à l'aide de l'API Google, afin que les nouveaux programmeurs puissent utiliser une nouvelle méthode:
J'ai écrit un tutoriel détaillé sur l'emplacement actuel dans Android sur mon blog demonuts.com Vous pouvez également trouver le code source complet développé avec Android Studio.
Tout d'abord, mettez-le dans un fichier gradle
puis implémenter les interfaces nécessaires
déclarer des instances
mettre ça dans
onCreate()
Enfin, remplacez les méthodes nécessaires
N'oubliez pas de démarrer le GPS sur votre appareil avant d'exécuter l'application.
la source
mLocation
donne toujours null. J'ai essayé la même chose que mentionnécompile 'com.google.android.gms:play-services-location:11.0.4'
au lieu d'ajouter tous les services google play à votre application.Comme je n'ai pas aimé une partie du code dans les autres réponses, voici ma solution simple. Cette solution est censée être utilisable dans une activité ou un service pour suivre l'emplacement. Il s'assure qu'il ne renvoie jamais de données trop périmées, sauf si vous demandez explicitement des données périmées. Il peut être exécuté en mode rappel pour obtenir les mises à jour au fur et à mesure que nous les recevons, ou en mode sondage pour interroger les informations les plus récentes.
Interface générique LocationTracker. Nous permet d'avoir plusieurs types de trackers de localisation et de brancher facilement celui qui convient:
ProviderLocationTracker - cette classe suivra l'emplacement du GPS ou du RÉSEAU.
C'est le FallbackLocationTracker, qui suivra à la fois par GPS et RÉSEAU, et utilisera n'importe quel emplacement plus précis.
Étant donné que les deux implémentent l'interface LocationTracker, vous pouvez facilement changer d'avis sur celui à utiliser. Pour exécuter la classe en mode sondage, il suffit d'appeler start (). Pour l'exécuter en mode mise à jour, appelez start (Listener).
Jetez également un œil à mon article de blog sur le code
la source
FallbackLocationTracker fallbackLocationTracker = new FallbackLocationTracker(mContext); fallbackLocationTracker.start(); if (fallbackLocationTracker.hasLocation()) { return fallbackLocationTracker.getLocation(); }
Obtenez l'emplacement du GPS par -
la source
location.getSpeed()
renvoie la vitesse en mètre / sec (pas en mètre / min).Vous devez utiliser la dernière / la plus récente
Fondamentalement, ce que vous devez faire est:
alors
pour l'emplacement le plus précis et le plus fiable. Voir mon article ici:
https://stackoverflow.com/a/33599228/2644905
N'utilisez pas LocationListener qui n'est pas précis et dont la réponse est retardée. Pour être honnête, c'est plus facile à mettre en œuvre. Lisez également la documentation: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient
la source
J'espère que cela t'aidera...
la source
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Maintenant que les services de localisation de Google Play sont là, je recommande aux développeurs de commencer à utiliser le nouveau fournisseur de localisation fusionné. Vous le trouverez plus facile à utiliser et plus précis. Veuillez regarder la vidéo Google I / O Beyond the Blue Dot: New Features in Android Location par les deux gars qui ont créé la nouvelle API des services de localisation Google Play.
J'ai travaillé avec des API de localisation sur un certain nombre de plates-formes mobiles, et je pense que ce que ces deux gars ont fait est vraiment révolutionnaire. Il s'est débarrassé d'une énorme quantité de complexités liées à l'utilisation des différents fournisseurs. Stack Overflow regorge de questions sur le fournisseur à utiliser, s'il faut utiliser le dernier emplacement connu, comment définir d'autres propriétés sur le LocationManager, etc. Cette nouvelle API qu'ils ont construite supprime la plupart de ces incertitudes et rend les services de localisation un plaisir pour utilisation.
J'ai écrit une application Android qui obtient périodiquement l'emplacement à l'aide des services de localisation Google Play et envoie l'emplacement à un serveur Web où il est stocké dans une base de données et peut être consulté sur Google Maps . J'ai écrit à la fois le logiciel client (pour Android, iOS, Windows Phone et Java ME ) et le logiciel serveur (pour ASP.NET et SQL Server ou PHP et MySQL ). Le logiciel est écrit dans la langue maternelle sur chaque plate-forme et fonctionne correctement en arrière-plan sur chacune. Enfin, le logiciel a la licence MIT . Vous pouvez trouver le client Android ici:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
la source
Le plus simple que vous puissiez trouver
la source
LocationManager est une classe qui fournit des méthodes intégrées pour obtenir le dernier emplacement connu
LocationManager locationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);
Il existe deux types de fournisseurs de GPS et de réseau
Si l'objet de localisation est nul, n'essayez pas d'appeler ci-dessous la méthode s
getLatitude and getLongitude is methods which returns double values
la source
Obtenir des mises à jour de localisation nécessite beaucoup de code bolierplate dans Android, vous devez prendre soin de
Pour faciliter toutes ces étapes, j'ai créé Android-EasyLocation (petite bibliothèque Android) qui prendra soin de tout cela et vous pourrez vous concentrer sur la logique métier.
Tout ce dont vous avez besoin est d'étendre EasyLocationActivity et cela
ou
Exemple d'application de paiement et étapes nécessaires ici à https://github.com/akhgupta/Android-EasyLocation
la source
J'ai réalisé un projet à partir duquel nous pouvons obtenir la position exacte en utilisant les services Google Play, les fournisseurs de GPS et de réseau. Ce projet se trouve ici .
La stratégie pour trouver le meilleur emplacement consiste à obtenir d'abord l'emplacement des services google play si l'emplacement est trouvé, puis à vérifier qu'il fait mieux ou non, si l'emplacement trouvé est nul, redémarrez les services google play et essayez de récupérer l'emplacement à partir de l'API Android Location. Enregistrez l'emplacement sur les écouteurs de changement et chaque fois que le meilleur emplacement est trouvé, le rappel le renvoie à l'activité principale.
Il est très simple d'utiliser et d'implémenter dans le code seulement deux classes que nous devons intégrer, c'est
LocationManagerInterface
-àSmartLocationManager
-LocationActivity
dire d'implémenter l'interface et d'utiliser SmartLocationManager pour récupérer l'emplacement.voici la classe du gestionnaire d'emplacement
on peut l'utiliser avec de l'activité ou un fragment, ici je l'utilise avec de l'activité
J'espère que cela aide, si vous pouvez suggérer une amélioration, veuillez l'afficher sur git . Merci.
la source
GoogleSamples a un exemple détaillé utilisant la dernière FusedLocationProviderApi. Malheureusement, les réponses les plus votées sont obsolètes.
Suivez les exemples ci-dessous pour implémenter les services de localisation à l'aide de 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
la source
Si vous créez de nouveaux projets de localisation pour Android, vous devez utiliser les nouveaux services de localisation de Google Play . Il est beaucoup plus précis et beaucoup plus simple à utiliser.
Je travaille sur un projet de traqueur GPS open source , GpsTracker, depuis plusieurs années. Je l'ai récemment mis à jour pour gérer les mises à jour périodiques des téléphones portables Android, iOS, Windows Phone et Java ME . Il est entièrement fonctionnel et fait ce dont vous avez besoin et dispose de la licence MIT .
Le projet Android au sein de GpsTracker utilise les nouveaux services Google Play et il y a également deux piles de serveurs ( ASP.NET et PHP ) pour vous permettre de suivre ces téléphones.
la source
Pour une simple vérification de l'emplacement, vous pouvez utiliser le code suivant. Vous pouvez le placer dans votre onStart () d'activité principale et afficher la boîte de dialogue d'alerte si le retour est faux.
la source
J'ai un emplacement très précis en utilisant FusedLocationProviderClient
( services Google Play requis )
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
"com.google.android.gms: play-services-location: 15.0.0"
la source
La meilleure façon de récupérer l'emplacement est ci-dessous
la source
J'ai publié une petite bibliothèque qui peut faciliter l'obtention de données de localisation dans Android, elle prend même en charge les autorisations d'exécution d'Android M.
Vous pouvez le vérifier ici: https://github.com/julioromano/RxLocation et l'utiliser ou son code source comme exemples pour votre implémentation.
la source
Recherche simple d'écriture de code dans la méthode On Location
la source
Je recommanderai d'utiliser la bibliothèque de localisation intelligente
Très simple à utiliser et elle encapsule bien la logique de localisation.
Pour démarrer le service de localisation:
Si vous souhaitez simplement obtenir un emplacement unique (non périodique), vous pouvez simplement utiliser le modificateur oneFix. Exemple:
la source
Manière simple et facile,
Obtenez l'emplacement en utilisant https://github.com/sachinvarma/EasyLocation .
Étape 1: appelez simplement
timeInterval -> setInterval (long) (inMilliSeconds) signifie - définir l'intervalle dans lequel vous souhaitez obtenir les emplacements.
rapidTimeInterval -> setFastestInterval (long) (inMilliSeconds) signifie - si un emplacement est disponible plus tôt, vous pouvez l'obtenir. (c'est-à-dire qu'une autre application utilise les services de localisation).
runAsBackgroundService = True -> (Le service s'exécutera en arrière-plan et se mettra à jour fréquemment (selon le timeInterval et le plus rapideTimeInterval)) runAsBackgroundService = False -> (le service sera détruit après une mise à jour réussie de l'emplacement)
Étape 2: Préparez les abonnés EventBus: déclarez et annotez votre méthode d'abonnement, spécifiez éventuellement un mode de thread:
par exemple:
C'est tout.
J'espère que cela aidera quelqu'un à l'avenir.
la source
Avril 2020
Étapes complètes pour obtenir l'emplacement actuel et éviter la nullité du dernier emplacement connu.
Selon la documentation officielle , le dernier emplacement connu pourrait être nul en cas de:
Dans ce cas, vous devez demanderLocationUpdates et recevoir le nouvel emplacement sur LocationCallback .
Par les étapes suivantes, votre dernier emplacement connu n'est jamais nul.
Prérequis: bibliothèque EasyPermission
Étape 1: dans le fichier manifeste, ajoutez cette autorisation
Étape 2:
Étape 3: créer les fonctions requises à appeler dans onCreate ()
Étape 4:
Gérez les rappels dans onActivityResult () après vous être assuré que l'emplacement est ouvert ou que l'utilisateur accepte de l'ouvrir.
Étape 5: Obtenez le dernier emplacement connu de FusedClientApi
J'espère que cela vous aidera.
Codage heureux 🤓
la source