Warum kommt manchmal null raus?
Hallo. Ich mache gerade eine App, die den Standort des Users finden soll. Manchmal klappt es und manchmal kommt null raus. Hier mal der Code:
lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationTracker);
lManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, locationTracker, null);
userLocation = locationTracker.lastUserLocation;
Location gpsLocation = null;
Location networkLocation = null;
Location passiveLocation = null;
try {
gpsLocation = lManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
} catch (SecurityException e) {
Toast.makeText(getActivity(), "Error: SecurityException. (" + e + ")", Toast.LENGTH_SHORT).show();
}
try {
networkLocation = lManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
} catch (SecurityException e) {
Toast.makeText(getActivity(), "Error: SecurityException. (" + e + ")", Toast.LENGTH_SHORT).show();
}
try {
passiveLocation = lManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
} catch (SecurityException e) {
Toast.makeText(getActivity(), "Error: SecurityException. (" + e + ")", Toast.LENGTH_SHORT).show();
}
if (gpsLocation != null) {
userLocation = gpsLocation;
} else if (networkLocation != null) {
userLocation = networkLocation;
} else if (passiveLocation != null) {
userLocation = passiveLocation;
} else if(locationTracker.lastUserLocation != null) {
Toast.makeText(getActivity(), "Using last known location", Toast.LENGTH_SHORT).show();
userLocation = locationTracker.lastUserLocation;
} else {
Toast.makeText(getActivity(), "Error: Unable to get your location. Try Again.", Toast.LENGTH_SHORT).show();
userLocation = null;
}
Das ist der Code, der onClick auf einen Button ausgeführt wird. in meiner onViewCreate Methode hab ich außerdem noch:
lManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if(getActivity().checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED) {
lManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationTracker);
}
Was ich nur nicht verstehe, wieso genau kommt da denn manchmal null raus? Ich sende doch eine request damit der Standort geupdatet wird. Jemand vielleicht eine Idee?
Danke im Voraus und lg.
P.S.:
Getestet auf ZTE Blade V10 (Android 9, API Level 29). Die ganze App ist auf Level 21.
Verstehe deine Frage nicht ganz. Du initialisierst userlocation doch mit "null", wenn "unable to get ...". Meinst nicht, dass es daran liegt?
Klar, damit initialisiere ich sie. Aber davor mach ich eine Request um die Location zu aktuallisieren. Und danach suche ich nach dem letzten Standort (Der geupdatet sein sollte)
Schau mal hier nach einem Unterschied zwischen GSP_Provider uns NETWORK_Provider.
Das war (bzw. ist) extrem hilfreich ... Vielen Dank!
1 Antwort
Weil gps-, network- und passiveLocation auch null sind :P
Warum das null ist bzw. sein kann, musst Du in der Doku nachlesen.
Ich rate einfach mal, dass dein Gerät manchmal keine Verbindung hat.
Deshalb tracken Apps, die die Position brauchen, auch dauerhaft im Hintergrund, z.B. alle 100ms. So können sie dann immer die letzte Position nehmen und durch die hohe Frequenz und weil Du dich in unter einer Sekunde nicht sehr weit bewegen wirst, ist das trotzdem noch genau genug.
Zumindest ist das meine Theorie, keine Ahnung, wie das andere Apps machen, ich weiß nur, wie ich das mal gemacht habe.