Je venais tout juste de faire fonctionner ce système, mais lorsque j'ai désactivé mon accès Wi-Fi pour savoir si je pouvais obtenir un emplacement plus précis à l'aide de mon GPS, cela m'apporte maintenant une erreur NullPointer
et je ne vois pas pourquoi.
Le code ci-dessous est appelé en premier.
public void onConnected(Bundle dataBundle) {
connected = true;
//Request an update from the location client to get current Location details
mLocationClient.requestLocationUpdates(mLocationRequest,this);
Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
}
Ce qui implique alors que cette méthode soit appelée
public void onLocationChanged(Android.location.Location location) {
// Report to the UI that the location was updated
String msg = "Updated Location: " +
Double.toString(location.getLatitude()) + "," +
Double.toString(location.getLongitude());
if(tmp != location.getLatitude())
{
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
tmp = location.getLatitude();
}
Vous pouvez voir que j'ai 2 toasts là-bas et qu'ils reviennent très bien avec les coordonnées GPS réelles, mais lorsque j'appelle le code ci-dessous, il tombe en panne sur la nouvelle ligne de localisation getLastKnownLocation
public String getLocation()
{
// Get the location manager
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = locationManager.getBestProvider(criteria, false);
Android.location.Location location = locationManager.getLastKnownLocation(bestProvider);
Double lat,lon;
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
try {
lat = location.getLatitude ();
lon = location.getLongitude ();
Toast.makeText(this,""+lat.toString()+"-"+lon.toString(),Toast.LENGTH_SHORT).show();
return new LatLng(lat, lon).toString();
}
catch (NullPointerException e){
Toast.makeText(this,"HELL-NO",Toast.LENGTH_SHORT).show();
Log.e("HELL-NO","n",e);
e.printStackTrace();
return null;
}
}
Je ne comprends tout simplement pas pourquoi, lorsque j'essaie de récupérer l'emplacement, qui semble avoir été récupéré dans la méthode onLocationChanged
, il génère un nullpointer.
vous mélangez les API de nouvel et ancien emplacement quand vous ne devriez pas.
pour obtenir le dernier emplacement connu, il vous suffit d'appeler
mLocationClient.getLastLocation();
une fois le service de localisation connecté.
lisez comment utiliser la nouvelle API d'emplacement
http://developer.Android.com/training/location/retrieve-current.html#GetLocation
J'ai simplement changé
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) to
locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
Cela a résolu la solution pour moi. Extrait complet:
map = ((MapFragment) getFragmentManager().
findFragmentById(R.id.map)).getMap();
map.setMyLocationEnabled(true);
locationManager = (LocationManager)getSystemService
(Context.LOCATION_SERVICE);
getLastLocation = locationManager.getLastKnownLocation
(LocationManager.PASSIVE_PROVIDER);
currentLongitude = getLastLocation.getLongitude();
currentLatitude = getLastLocation.getLatitude();
currentLocation = new LatLng(currentLatitude, currentLongitude);
J'espère que cela t'aides.
essayez ce code:
LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();
private Location getLastKnownLocation() {
mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
if (l == null) {
continue;
}
if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
// Found best last known location: %s", l);
bestLocation = l;
}
}
return bestLocation;
}
J'ai lutté avec celui-ci pendant un long moment. Mais Google vient de proposer une solution.
googleMap.getMyLocation();
pour obtenir l'emplacement du point bleu sur api V2.