Ich habe eine kleine Anwendung mit einer schrittweisen Beschreibung erstellt, um die GPS-Koordinaten des aktuellen Standorts abzurufen.
Der vollständige Beispielquellcode befindet sich unter Aktuelle Standortkoordinaten abrufen, Städtename - in Android .
Sehen, wie es funktioniert:
Wir müssen lediglich diese Berechtigung in die Manifestdatei einfügen:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Erstellen Sie eine LocationManager-Instanz wie folgt:
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
Überprüfen Sie, ob GPS aktiviert ist oder nicht.
Implementieren Sie dann LocationListener und erhalten Sie die Koordinaten:
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
Hier ist der Beispielcode dafür
/*---------- 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
der Zeile gibt, die mit beginntcityName =
, schlägt dies mit einer Ausnahme fehl. Die Verwendung von Zahnspangen würde das Problem beheben.getLastKnownLocation()
sei ein "abgestandener" Ort - warum ist das so? Wird beim TelefonierengetLastKnownLocation()
nicht das neueste GPS des GPS des Telefons angezeigt?Hier finden Sie zusätzliche Informationen für andere Antworten.
Da hat Android
Sie können sich bei beiden registrieren und gleichzeitig Ereignisse
onLocationChanged(Location location)
von zwei abrufen . So weit, ist es gut. Nun die Frage, brauchen wir zwei Ergebnisse oder wir sollten das Beste nehmen. Wie ich weiß, haben dieGPS_PROVIDER
Ergebnisse eine bessere Genauigkeit alsNETWORK_PROVIDER
.Definieren wir das
Location
Feld:Bevor wir mit dem Abhören der Standortänderung beginnen , implementieren wir die folgende Methode. Diese Methode gibt den letzten bekannten Standort zwischen dem GPS und dem Netzwerk zurück. Für diese Methode ist neuer am besten.
Jedes Mal, wenn wir einen neuen Standort abrufen, werden wir ihn mit unserem vorherigen Ergebnis vergleichen.
Ich füge eine neue Methode hinzu
onLocationChanged
:quelle
private Location currentBestLocation = null;
und fügen Sie `makeUseOfNewLocation (location);` zur onLocationChanged (..) -Methode hinzuSie finden den Standort entweder über
GPS_PROVIDER or NETWORK_PROVIDER
.Übersicht über Ortungsdienste in Android.
Hier ist ein Beispiel, das versucht, den Standort mithilfe von GPS zu finden. Wenn Ihr GPS nicht verfügbar ist, versuchen Sie, das Netzwerk zu verwenden, um den Standort zu finden.
GPSTracker.java
Aktivität -AndroidGPSTrackingActivity.java
Layout- main.xml
AndroidManifest.xml
quelle
Es gibt dort bereits viele Antworten, aber ich möchte den neuesten Weg zeigen, um mithilfe der Google-API den Standort zu ermitteln, damit neue Programmierer neue Methoden verwenden können:
Ich habe ein detailliertes Tutorial zum aktuellen Standort in Android auf meinem Blog Demonuts.com geschrieben. Dort finden Sie auch den vollständigen Quellcode, der mit Android Studio entwickelt wurde.
Legen Sie dies zunächst in eine Gradle-Datei
Implementieren Sie dann die erforderlichen Schnittstellen
Instanzen deklarieren
Gib das ein
onCreate()
Überschreiben Sie schließlich die erforderlichen Methoden
Vergessen Sie nicht, GPS auf Ihrem Gerät zu starten, bevor Sie die App ausführen.
quelle
mLocation
gibt immer null. Ich versuchte das gleiche wie erwähntcompile 'com.google.android.gms:play-services-location:11.0.4'
Ihrer App alle Google Play-Dienste hinzufügen, anstatt sie hinzuzufügen.Da mir ein Teil des Codes in den anderen Antworten nicht gefallen hat, ist hier meine einfache Lösung. Diese Lösung soll in einer Aktivität oder einem Dienst verwendet werden können, um den Standort zu verfolgen. Es stellt sicher, dass niemals zu veraltete Daten zurückgegeben werden, es sei denn, Sie fordern ausdrücklich veraltete Daten an. Es kann entweder in einem Rückrufmodus ausgeführt werden, um Aktualisierungen zu erhalten, sobald wir sie erhalten, oder im Abfragemodus, um die neuesten Informationen abzufragen.
Generische LocationTracker-Schnittstelle. Ermöglicht es uns, mehrere Arten von Standort-Trackern zu haben und den entsprechenden einfach anzuschließen:
ProviderLocationTracker - Diese Klasse verfolgt den Standort für GPS oder NETWORK.
Dies ist der FallbackLocationTracker, der sowohl über GPS als auch über NETWORK verfolgt und jeden Ort verwendet, der genauer ist.
Da beide die LocationTracker-Oberfläche implementieren, können Sie Ihre Meinung zu der zu verwendenden leicht ändern. Um die Klasse im Abfragemodus auszuführen, rufen Sie einfach start () auf. Um es im Update-Modus auszuführen, rufen Sie start (Listener) auf.
Schauen Sie sich auch meinen Blog-Beitrag zum Code an
quelle
FallbackLocationTracker fallbackLocationTracker = new FallbackLocationTracker(mContext); fallbackLocationTracker.start(); if (fallbackLocationTracker.hasLocation()) { return fallbackLocationTracker.getLocation(); }
Holen Sie sich den Standort von GPS durch -
quelle
location.getSpeed()
die Geschwindigkeit in Meter / Sek. (Nicht Meter / Min.) Zurück .Sie müssen die neuesten / neuesten verwenden
Grundsätzlich müssen Sie Folgendes tun:
Dann
für den genauesten und zuverlässigsten Ort. Siehe meinen Beitrag hier:
https://stackoverflow.com/a/33599228/2644905
Verwenden Sie keinen LocationListener, der nicht genau ist und die Antwort verzögert hat. Um ehrlich zu sein, ist dies einfacher zu implementieren. Lesen Sie auch die Dokumentation: https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient
quelle
Ich hoffe, dies wird dir helfen...
quelle
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Nachdem die Google Play-Standortdienste verfügbar sind, empfehle ich Entwicklern, den neuen Anbieter für fusionierte Standorte zu verwenden. Sie finden es einfacher zu bedienen und genauer. Sehen Sie sich das Google I / O- Video Beyond the Blue Dot an: Neue Funktionen in Android Location von den beiden Jungs, die die neue API für Google Play-Standortdienste erstellt haben.
Ich habe mit Standort-APIs auf einer Reihe von mobilen Plattformen gearbeitet, und ich denke, was diese beiden Jungs getan haben, ist wirklich revolutionär. Es hat eine große Menge der Komplexität der Verwendung der verschiedenen Anbieter beseitigt. Der Stapelüberlauf ist übersät mit Fragen darüber, welcher Anbieter verwendet werden soll, ob der letzte bekannte Standort verwendet werden soll, wie andere Eigenschaften im LocationManager festgelegt werden sollen usw. Diese neue API, die sie erstellt haben, beseitigt die meisten dieser Unsicherheiten und macht die Standortdienste zu einem Vergnügen verwenden.
Ich habe eine Android-App geschrieben, die den Standort regelmäßig mithilfe der Google Play-Standortdienste abruft und an einen Webserver sendet, auf dem er in einer Datenbank gespeichert und in Google Maps angezeigt werden kann . Ich habe sowohl die Client-Software (für Android, iOS, Windows Phone und Java ME ) als auch die Server-Software (für ASP.NET und SQL Server oder PHP und MySQL ) geschrieben. Die Software ist auf jeder Plattform in der Muttersprache geschrieben und funktioniert auf jeder Plattform ordnungsgemäß im Hintergrund. Schließlich hat die Software die MIT-Lizenz . Den Android-Client finden Sie hier:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
quelle
Am einfachsten können Sie finden
quelle
LocationManager ist eine Klasse, die integrierte Methoden bereitstellt, um den letzten Standort zu ermitteln
LocationManager locationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE);
Es gibt zwei Arten von Anbieter-GPS und Netzwerk
Wenn Standort Objekt ist null dann versucht nicht zu Anruf unter Methode s
getLatitude and getLongitude is methods which returns double values
quelle
Um Standortaktualisierungen zu erhalten, ist in Android viel Bolierplate-Code erforderlich. Sie müssen sich darum kümmern
Um all diese Schritte zu vereinfachen, habe ich Android-EasyLocation (kleine Android-Bibliothek) erstellt, die sich um all diese Dinge kümmert und Sie können sich auf die Geschäftslogik konzentrieren.
Alles was Sie brauchen, ist EasyLocationActivity zu erweitern und dies
oder
Checkout-Beispiel-App und erforderliche Schritte finden Sie hier unter https://github.com/akhgupta/Android-EasyLocation
quelle
Ich habe ein Projekt erstellt, aus dem wir mithilfe von Google Play Services, GPS und Netzwerkanbietern den genauen Standort ermitteln können. Dieses Projekt finden Sie hier .
Die Strategie bei der Suche nach dem besten Standort besteht darin, zuerst den Standort von den Google Play-Diensten abzurufen, wenn der Standort gefunden wurde, und dann zu überprüfen, ob das Wetter besser ist oder nicht. Wenn der gefundene Standort null ist, starten Sie die Google Play-Dienste neu und versuchen Sie, den Standort von der Android-Standort-API abzurufen. Registrieren Sie den Standort bei Änderungslistenern, und wenn der bessere Standort gefunden wird, kehrt der Rückruf zur Hauptaktivität zurück.
Es ist sehr einfach zu bedienen und nur zwei Klassen in Code implementieren müssen wir einbetten also
LocationManagerInterface
undSmartLocationManager
,LocationActivity
wird die Schnittstelle implementiert und mit SmartLocationManager Standort zu holen.Hier ist die Location Manager-Klasse
wir können es mit Aktivität oder einem Fragment verwenden, hier verwende ich es mit Aktivität
Hoffe es hilft, wenn du eine Verbesserung vorschlagen kannst, poste sie bitte auf git . Vielen Dank.
quelle
GoogleSamples verfügt über ein ausführliches Beispiel mit dem neuesten FusedLocationProviderApi. Leider sind die am besten bewerteten Antworten veraltet.
Befolgen Sie die folgenden Beispiele, um Location Services mit FusedLocationProviderApi zu implementieren
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
quelle
Wenn Sie neue Standortprojekte für Android erstellen, sollten Sie das neue Google Play verwenden Standortdienste verwenden. Es ist viel genauer und einfacher zu bedienen.
Ich arbeite seit mehreren Jahren an einem Open-Source-GPS-Tracker-Projekt , GpsTracker. Ich habe es kürzlich aktualisiert, um regelmäßige Updates von Android-, iOS-, Windows Phone- und Java ME -Handys zu verarbeiten. Es ist voll funktionsfähig und macht das, was Sie brauchen und hat die MIT-Lizenz .
Das Android-Projekt in GpsTracker verwendet die neuen Google Play-Dienste. Außerdem gibt es zwei Server-Stacks ( ASP.NET und PHP ), mit denen Sie diese Telefone verfolgen können.
quelle
Für die Standortüberprüfung können Sie den folgenden Code verwenden. Sie können es in Ihr onStart () der Hauptaktivität einfügen und den Warndialog anzeigen, wenn return falsch ist.
quelle
Ich habe mit FusedLocationProviderClient einen sehr genauen Standort
( Google Play-Dienste erforderlich ).
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
'com.google.android.gms: Play-Services-Standort: 15.0.0'
quelle
Der beste Weg, um den Standort abzurufen, ist unten
quelle
Ich habe eine kleine Bibliothek veröffentlicht, die das Abrufen von Standortdaten in Android vereinfacht und sogar die Laufzeitberechtigungen für Android M berücksichtigt.
Sie können es hier überprüfen: https://github.com/julioromano/RxLocation und es oder seinen Quellcode als Beispiele für Ihre Implementierung verwenden.
quelle
Einfache Suche Schreibcode in On-Location-Methode
quelle
Ich werde die Verwendung der Smart Location Library empfehlen.
Sehr einfach zu bedienen und die Standortlogik ist gut verpackt.
So starten Sie den Ortungsdienst:
Wenn Sie nur einen einzelnen Speicherort (nicht periodisch) erhalten möchten, können Sie einfach den oneFix-Modifikator verwenden. Beispiel:
quelle
Einfach und leicht,
Ermitteln Sie den Standort mithilfe von https://github.com/sachinvarma/EasyLocation .
Schritt 1: Rufen Sie einfach an
timeInterval -> setInterval (long) (inMilliSeconds) bedeutet - legt das Intervall fest, in dem Sie Standorte abrufen möchten.
schnellstes Zeitintervall -> setFastestInterval (lang) (inMilliSeconds) bedeutet - wenn ein Standort früher verfügbar ist, können Sie ihn abrufen. (dh eine andere App verwendet die Ortungsdienste).
runAsBackgroundService = True -> (Dienst wird im Hintergrund ausgeführt und häufig aktualisiert (entsprechend timeInterval und schnellsterTimeInterval)) runAsBackgroundService = False -> (Dienst wird nach einer erfolgreichen Standortaktualisierung zerstört)
Schritt 2: EventBus-Abonnenten vorbereiten: Deklarieren und kommentieren Sie Ihre Abonnementmethode, und geben Sie optional einen Thread-Modus an:
z.B:
Das ist alles.
Hoffe, es wird jemandem in Zukunft helfen.
quelle
April 2020
Vollständige Schritte zum Abrufen des aktuellen Standorts und Vermeiden der Nullbarkeit des zuletzt bekannten Standorts.
Nach offizieller Dokumentation , letzte bekannte Position könnte Null bei:
In diesem Fall sollten Sie LocationUpdates anfordern und den neuen Speicherort auf dem LocationCallback erhalten .
Durch die folgenden Schritte wird Ihr letzter bekannter Standort niemals null.
Voraussetzung: EasyPermission-Bibliothek
Schritt 1: Fügen Sie in der Manifestdatei diese Berechtigung hinzu
Schritt 2:
Schritt 3: Erstellen Sie die erforderlichen Funktionen, die in onCreate () aufgerufen werden sollen.
Schritt 4:
Behandeln Sie Rückrufe in onActivityResult (), nachdem Sie sichergestellt haben, dass der Speicherort geöffnet ist oder der Benutzer akzeptiert, ihn zu öffnen.
Schritt 5: Holen Sie sich den letzten bekannten Speicherort von FusedClientApi
Ich hoffe das würde helfen.
Viel Spaß beim Codieren 🤓
quelle