Android Location Fehler
-
01-10-2019 - |
Frage
Ich habe aus meinem Problem zu ein paar Zeilen Code zelten
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 5.0f, this);
lat = location.getLatitude();
lng = location.getLongitude();
//lat = new Double(40.431682);
//lng = new Double(-74.2021819);
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
Meine OnLocationChanged wenn Sie mich fragen,
public void onLocationChanged(Location location) {
if (location != null) {
lat = location.getLatitude();
lng = location.getLongitude();
pLocation = new GeoPoint((int)(lat * 1000000), (int)(lng * 1000000));
}
}
Meine Anwendung stürzt ab, wenn ich versuche, die LastKnownLocation
zu bekommenAber es funktioniert gut, wenn ich es einen Ort Feed manuell
Ich habe keine Ahnung, zur Zeit, was ist falsch
Lösung
Als erstes, wenn Sie einen Absturz, Verwendung adb logcat
erhalten, DDMS oder die DDMS Perspektive in Eclipse die Java-Stack-Trace mit dem Absturz verbunden zu bekommen. In diesem Fall vermute ich, werden Sie feststellen, dass Sie ein NullPointerException
haben beim Versuch, location
Objekt zu verwenden.
Sie können nicht getLastKnownLocation()
bis gut verwenden, nachdem Sie requestLocationUpdates()
nennen, vor allem für GPS. Es kann zehn Sekunden für die GPS-nimmt Korrekturen starten bereitstellt.
Bitte ändern Sie den Code Ihre Nutzung getLastKnownLocation()
zu beseitigen und nur die Logik verwenden, um die Lage bereits in Ihrer onLocationChanged()
Methode benötigen. Zumindest Look für ein null
location
Objekt und versuchen Sie nicht, es zu benutzen.
Andere Tipps
Mein fix war im Grunde nur Gebrauch grober Lage.
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
String bestProvider = lm.getBestProvider(criteria, true);
Location loc = lm.getLastKnownLocation(bestProvider);
lat = loc.getLatitude();
lng = loc.getLongitude();
Dies kann passieren, weil feine Lage (GPS) nicht auf dem Gerät aktiviert ist. Oder ACCESS_FINE_LOCATION Genehmigung ist in Ihrem Manifest nicht angegeben.
Ich wette, wenn Sie debuggen Sie null Ausnahme sehen. So kommt es, weil Sie extrahieren geografische Breite und Länge von Lage sind versucht, die noch nicht behoben ist. Surround diese Extraktion mit if (loc! = Null) {} und setzen progressDialog zu halten Benutzer dort