Je crée une application dans laquelle l'utilisateur doit voir son emplacement géographique avec getMyLocation (), mais cette fonction renvoie la valeur null. Existe-t-il une solution à cela, car j’ai lu que la méthode getMyLocation () renvoie toujours la valeur null. Google Maps étant nouveau pour moi, toute aide sera la bienvenue!
Code:
GoogleMap map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
map.setMyLocationEnabled(true);
Location myLocation = map.getMyLocation();
if( myLocation != null ){
helper.showToast( "Latitude: " + myLocation.getLatitude() + "\nLongitude: " + myLocation.getLongitude() );
}
veuillez vérifier le code exemple du Google Maps Android API v2
. En l'utilisant, vous pourrez résoudre votre problème.
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
mMap.setMyLocationEnabled(true);
// Check if we were successful in obtaining the map.
if (mMap != null) {
mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location arg0) {
// TODO Auto-generated method stub
mMap.addMarker(new MarkerOptions().position(new LatLng(arg0.getLatitude(), arg0.getLongitude())).title("It's Me!"));
}
});
}
}
}
appeler cette fonction sur la fonction de création
Je n'aime pas les nouvelles API Google Maps à cause de leurs défauts et de leurs défauts. Dans votre cas, je pense que le meilleur moyen consiste à utiliser LocationManager et LocationListener classes. Vous obtiendrez l'emplacement, lorsque votre téléphone trouvera des satellites, puis vous pourrez ajouter le marqueur sur la carte. Vous pouvez également utiliser la méthode getLastKnownLocation () si vous avez besoin d’obtenir un emplacement rapidement. Je pense que la méthode getMyLocation()
de google maps renvoie la valeur null car le téléphone n'a pas beaucoup de temps pour connaître son emplacement, au démarrage de l'application. De plus, dans Google Maps API v2, il n’existe pas de méthode onLocationChanged()
. Je n'aime pas cette API.
J'ai fait comme ça:
private GoogleMap mGoogleMap;
private SupportMapFragment mMapFragment;
on onCreate () :
mMapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
mGoogleMap = mMapFragment.getMap();
mGoogleMap.setOnMyLocationChangeListener(myLocationChangeListener);
Maintenant, ajoutez MyLocationChangeListener :
private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
Log.i(TAG, "Latitude: "+String.valueOf(location.getLatitude())+" - Longitude: "+String.valueOf(location.getLongitude()));
}
};
J'espère que ceci vous aidera.
map.getMyLocation() return null
car il n'y a pas d'emplacement sur onCreate();
la première fois que la carte obtient la position se situe après le premier événement onCameraChange ().
alors utilisez
map.setOnCameraChangeListener( new ...)
sur votre carte et faites votre mise en œuvre après la première fois