Wie bekomme ich die aktuelle GPS-Position programmgesteuert in Android?
Ich brauche, um meinen aktuellen Standort per GPS programmgesteuert.
Wie kann ich es erreichen?
- Ich habe meinen Beispiel-code here
- Hier finden Sie Schritt für Schritt tutorial mit Beispiel-code für die GPS-prost!!
- Sie können die Android-SimpleLocation - Bibliothek (Apache-Lizenz) für eine einfachere Ortung
- Überprüfen Sie diese reuseable-Klasse stackoverflow.com/a/53348535/6667442
- Holen Sie sich die Antwort in Kotlin hier: stackoverflow.com/a/53800632/2201814
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich eine kleine Anwendung, mit Schritt für Schritt Beschreibung bekommen aktuellen Standort die GPS-Koordinaten.
Komplette Beispiel-source-code ist in Get Aktuellen Standort-Koordinaten , name der Stadt - in Android.
Sehen, wie es funktioniert:
Alles, was wir tun müssen ist, fügen Sie diese Berechtigungen in der manifest-Datei:
Und erstellen Sie eine LocationManager Instanz wie folgt:
Prüfen Sie, ob GPS aktiviert ist oder nicht.
Und dann umzusetzen LocationListener und erhalten Koordinaten:
Hier ist der Beispiel-code zu tun, so
adresses
die Zeile beginnend mitcityName =
fehl, mit einer Ausnahme. Geschweifte Klammern verwenden, würde es zu beheben.getLastKnownLocation()
ist eine "veraltete" Position-warum ist das so? Tut BerufunggetLastKnownLocation()
nicht die neuesten GPS-Lesen von Handy-GPS?Hier zusätzliche Informationen für die anderen Antworten.
Da Android hat
können Sie sich registrieren, um beide und starten abrufen von Ereignissen aus
onLocationChanged(Location location)
aus zwei zur gleichen Zeit. So weit So gut. Jetzt ist die Frage, brauchen wir zwei Ergebnisse, oder sollten wir das beste. Ich weißGPS_PROVIDER
Ergebnisse haben eine bessere Genauigkeit alsNETWORK_PROVIDER
.Definieren wir
Location
Feld:Bevor wir anfangen, hören Sie auf Lage ändern, implementieren wir die folgende Methode. Diese Methode liefert den letzten bekannten Standort, zwischen dem GPS und dem Netzwerk ein. Für diese neuere Methode ist die beste.
Jedes mal, wenn wir um einen neuen Standort vergleichen wir es mit unserem bisherigen Ergebnis.
Ich eine neue Methode hinzufügen, um
onLocationChanged
:private Location currentBestLocation = null;
und add ` makeUseOfNewLocation(Standort); " auf onLocationChanged (..) - MethodeisBetterLocation
der Lage, erhalten Sie von denonLocationChange
getLastBestLocation()
selbst scheint ausreichend für viele einfache Bedürfnisse.Finden Sie die Lage entweder durch
GPS_PROVIDER or NETWORK_PROVIDER
.Überblick über location services in Android.
Hier ist ein Beispiel, die versuchen zu finden, den Standort per GPS. Wenn Ihr GPS nicht verfügbar ist, dann versuchen Sie das Netzwerk für den Standort.
GPSTracker.java
Aktivität -AndroidGPSTrackingActivity.java
Layout - main.xml
AndroidManifest.xml
startService()
Methode????Gibt es schon viele Antworten gibt, aber ich will zeigen, neueste Weg, um Standort über Google-API, damit neue Programmierer können mit der neuen Methode:
Ich geschrieben haben detaillierte Anleitung, aktuelle Lage im android auf meinem blog demonuts.com finden Sie auch eine vollständige source-code entwickelt mit android studio.
Zuerst von all, setzen Sie diese in gradle-Datei
dann die Umsetzung notwendiger Schnittstellen
deklarieren Instanzen
setzen Sie diese in
onCreate()
Endlich, override notwendigen Methoden
Vergessen Sie nicht, starten Sie GPS in Ihrem Gerät bevor Sie app.
mLocation
gibt immer null. Ich habe versucht, die gleichen wie bereits erwähntcompile 'com.google.android.gms:play-services-location:11.0.4'
anstatt alle google-play-services an Ihre app.Da ich nicht wie einige der Codes in den anderen Antworten, hier meine einfache Lösung. Diese Lösung ist gedacht, um nutzbar zu sein in einer Aktivität oder Service zu verfolgen, die Lage. Es stellt sicher, dass Sie nie wieder Daten, zu abgestanden, es sei denn, Sie explizit anfordern, veraltete Daten. Es kann entweder eine callback-Modus, um updates zu erhalten, wie wir Sie erhalten, oder im poll-Modus zum abrufen der neuesten Informationen.
Generic LocationTracker-Schnittstelle. Es uns ermöglicht, mehrere Typen von Standort-Tracker, und stecken Sie das passende ganz einfach:
ProviderLocationTracker - diese Klasse wird verfolgen Sie den Standort entweder GPS oder NETZWERK.
Das ist die FallbackLocationTracker, die Tracks von GPS-und NETZWERK, und verwenden, was Lage ist genauer.
Da beide implementieren die LocationTracker-Schnittstelle, können Sie leicht ändern Sie Ihre Meinung, über die man zu verwenden. Zum ausführen der Klasse im poll-Modus, rufen start(). Es im update-Modus, Aufruf von start(Listener).
Werfen Sie auch einen Blick auf meine blog-post auf den code
FallbackLocationTracker fallbackLocationTracker = new FallbackLocationTracker(mContext); fallbackLocationTracker.start(); if (fallbackLocationTracker.hasLocation()) { return fallbackLocationTracker.getLocation(); }
Get Position gps-by -
Müssen Sie die Letzte/neueste
Im Grunde, was Sie tun müssen, ist:
Dann
für die genauesten und zuverlässigsten Lage. Siehe mein Beitrag hier:
https://stackoverflow.com/a/33599228/2644905
Nicht verwenden, LocationListener, das ist nicht korrekt und verzögerte Reaktion. Um ehrlich zu sein, dies ist einfacher zu implementieren.
Lesen Sie auch die Dokumentation: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient
Ich hoffe, dies wird Ihnen helfen,...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Nun, dass Google Play services Standorte hier sind, empfehle ich, die Entwickler beginnen mit der neuen fused location provider. Sie finden es einfacher zu bedienen und genauer. Bitte beobachten Sie die Google I/O video Über die Blue-Dot: Neue Funktionen im Android-Lage von den beiden Jungs, der neue Google Play location services API.
Ich arbeite mit dem location-APIs für eine Vielzahl von Handy-Plattformen, und ich denke, was diese beiden getan haben, ist wirklich Revolutionär. Es ist losgeworden, eine riesige Menge von der Komplexität der Verwendung der verschiedenen Anbieter. Stack-Überlauf ist übersät mit Fragen über die Anbieter an, ob die Letzte bekannte Position, wie Sie andere Eigenschaften festlegen, die auf den LocationManager, etc. Diese neue API, die Sie gebaut haben, beseitigt die meisten dieser Unsicherheiten und macht die location services ein Vergnügen zu verwenden.
Ich geschrieben habe, eine Android-app, die in regelmäßigen Abständen wird der Standort über Google Play location services und sendet die Position an einen web-server, wo Sie in einer Datenbank gespeichert und können eingesehen werden auf Google Maps. Ich habe geschrieben, sowohl die client-software (für Android, iOS, Windows Phone und Java ME) und die server-software (für ASP.NET und SQL Server oder PHP und MySQL). Die software ist geschrieben in der Muttersprache und auf jeder Plattform an und funktioniert im hintergrund auf jedem. Schließlich verfügt die software über die MIT-Lizenz. Finden Sie den Android-client hier:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
LocationManager ist eine Klasse, bietet in-build-Methoden, um letzten bekannten Standort
LocationManager locationManager = (LocationManager) Kontext.getSystemService(Context.LOCATION_SERVICE);
Threre sind zwei Arten von Anbieter GPS-und Netzwerk -
Wenn die Lage eines Objekts null ist, dann versuchen Sie nicht, um Anruf unter Methodes
getLatitude and getLongitude is methods which returns double values
Einfachsten finden Sie
Erste Standort-updates benötigt viel bolierplate-code in Android, die Sie brauchen zu kümmern,
Zu lindern aus all diese Schritte, die ich erstellt habe Android-EasyLocation (kleine android-Bibliothek) die kümmern all diese Dinge, und Sie können sich auf die Geschäftslogik.
Alles, was Sie brauchen, ist erweitern EasyLocationActivity und diese
oder
Checkout-Beispiel-app und Schritte, die benötigt werden hier bei https://github.com/akhgupta/Android-EasyLocation
GoogleSamples hat verbose Beispiel unter Verwendung der neuesten FusedLocationProviderApi.
Leider sind die meisten von Ihnen positiv bewertet werden Antworten veraltet sind.
Befolgen Sie die unten aufgeführten Beispiele zur Umsetzung Ort Dienstleistungen mit 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
Wenn Sie die Schaffung neuer Standort-Projekte für Android, die Sie verwenden sollten die neuen Google Play location services. Es ist viel präziser und viel einfacher zu benutzen.
Ich habe auf ein open-source-GPS-tracker-Projekt, GpsTracker, für mehrere Jahre. Ich vor kurzem aktualisiert, es handle regelmäßig mit updates von Android, iOS, Windows Phone und Java ME Handys. Es ist voll funktionsfähig und tut, was Sie brauchen, und hat die MIT-Lizenz.
Dem Android-Projekt innerhalb GpsTracker verwendet die neue Google-Play-Dienste und es gibt auch zwei server-stacks (ASP.NET und PHP) zu erlauben, Sie zu verfolgen, diese Telefone.
Nur für Ort der überprüfung können Sie verwenden Sie folgenden code. Sie können es in Ihrem onStart() der Haupt-Aktivität und display Warnmeldung, wenn die Rückgabe ist false.
Ich veröffentlicht haben, eine kleine Bibliothek, die können es einfach auf den Empfang von Standortdaten bei Android, es kümmert sich sogar um Android M-Berechtigungen für die Laufzeit.
Könnten Sie check it out hier: https://github.com/julioromano/RxLocation und verwenden Sie es, oder der its-source-code als Beispiele für Ihre Umsetzung.
Einfach Finden Sie Code Schreiben, der in On-Location-Methode
Werde ich empfehlen, mit Smart Location Bibliothek
Sehr einfach zu bedienen und es wickelt sich der Standort-Logik schön.
Für den Start des Standort-Dienstes:
Wenn Sie nur wollen, um eine einzelne Position (nicht periodisch), können Sie einfach die oneFix-modifier. Beispiel:
Ich habe sehr genaue Position mit Hilfe FusedLocationProviderClient
(Google Play-Dienste erforderlich)
android.die Genehmigung.ACCESS_FINE_LOCATION
android.die Genehmigung.ACCESS_COARSE_LOCATION
'com.google.android.gms:play-services-Standort:15.0.0'
Einfache Art und Weise,
Get Standort über https://github.com/sachinvarma/EasyLocation.
Schritt 1: rufen Sie Einfach
timeInterval -> setInterval(long)(inMilliSeconds) bedeutet - stellen Sie das Intervall ein, in dem Sie möchten, zu bekommen Standorten.
fastestTimeInterval -> setFastestInterval(lang)(inMilliSeconds) bedeutet, wenn eine Position vorhanden ist eher Sie es bekommen können. (also eine andere app nutzt die Ortungsdienste).
runAsBackgroundService = True -> (- Dienst im Hintergrund ausgeführt wird und Häufig aktualisiert(nach den timeInterval und fastestTimeInterval)) runAsBackgroundService = False -> (Service getDestroyed nach einer erfolgreichen Standort-update )
Schritt 2: Vorbereiten EventBus Abonnenten: Erklären und kommentieren Sie das Abonnement Methode, Optional ein-thread-Modus:
zB:
Das ist alles.
Hoffe, es hilft jemand in der Zukunft.
Beste Möglichkeit zum abrufen Lage ist unter