Comment obtenir l’emplacement actuel dans Google Maps Android API v2?

En utilisant

mMap.setMyLocationEnabled(true) 

peut définir l’activation de la couche myLocation.
Mais le problème est de savoir comment obtenir myLocation lorsque l’utilisateur clique sur le bouton? Je veux obtenir la longitude et la latitude.

L’emplacement de Google Maps API fonctionne désormais, même avec des écouteurs, vous pouvez le faire en utilisant cela, par exemple:

 private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(Location location) { LatLng loc = new LatLng(location.getLatitude(), location.getLongitude()); mMarker = mMap.addMarker(new MarkerOptions().position(loc)); if(mMap != null){ mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f)); } } }; 

puis définissez l’auditeur de la carte:

 mMap.setOnMyLocationChangeListener(myLocationChangeListener); 

Cela sera appelé lorsque la carte trouvera l’emplacement pour la première fois.

Pas besoin de LocationService ou de LocationManager.

OnMyLocationChangeListener interface OnMyLocationChangeListener est obsolète. utilisez plutôt com.google.android.gms.location.FusedLocationProviderApi. FusedLocationProviderApi améliore la recherche d’emplacement et la consommation d’énergie et est utilisée par le point bleu “Ma position”. Reportez-vous à MyLocationDemoActivity dans le dossier des applications exemple, par exemple un exemple de code ou le Guide du développeur d’emplacement.

Pour le moment, GoogleMap.getMyLocation () renvoie toujours null dans toutes les circonstances.

Il existe actuellement deux rapports de bogue concernant Google, à ma connaissance, les numéros 40932 et 4644 .

Implémenter un LocationListener comme indiqué précédemment serait incorrect car le LocationListener ne serait pas synchronisé avec LocationOverlay dans la nouvelle API que vous essayez d’utiliser.

Après le tutoriel sur le site de Vogella, lié plus tôt par Pramod J George, vous obtiendriez des indications sur l’ancienne API de Google Maps.

Je m’excuse donc de ne pas vous avoir donné une méthode pour récupérer votre position par ce moyen. Pour l’instant, locationListener est peut-être le seul moyen de le faire, mais je suis sûr que Google travaille sur la résolution du problème au sein de la nouvelle API.

Aussi désolé de ne pas poster plus de liens, StackOverlow pense que je suis du spam car je n’ai pas de représentant.

—- Mise à jour le 4 février 2013 —-

Google a déclaré que le problème serait résolu dans la prochaine mise à jour de l’API Google Maps via l’ édition 4644 . Je ne suis pas sûr de la date de mise à jour, mais une fois que cela sera fait, je modifierai de nouveau cet article.

—- Mise à jour le 10 avril 2013 —-

Google a déclaré que le problème avait été résolu via le numéro 4644 . Cela devrait fonctionner maintenant.

essaye ça

 LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); Ssortingng provider = service.getBestProvider(criteria, false); Location location = service.getLastKnownLocation(provider); LatLng userLocation = new LatLng(location.getLatitude(),location.getLongitude()); 

Assurez-vous d’avoir activé les services de localisation sur le périphérique. Sinon, vous n’obtiendrez aucune information relative à l’emplacement.

Cela fonctionne pour moi,

  map = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); map.setMyLocationEnabled(true); GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange (Location location) { LatLng loc = new LatLng (location.getLatitude(), location.getLongitude()); map.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f)); } }; map.setOnMyLocationChangeListener(myLocationChangeListener); 

}

Pour obtenir l’emplacement lorsque l’utilisateur clique sur un bouton, appelez cette méthode dans le onClick-

 void getCurrentLocation() { Location myLocation = mMap.getMyLocation(); if(myLocation!=null) { double dLatitude = myLocation.getLatitude(); double dLongitude = myLocation.getLongitude(); Log.i("APPLICATION"," : "+dLatitude); Log.i("APPLICATION"," : "+dLongitude); mMap.addMarker(new MarkerOptions().position( new LatLng(dLatitude, dLongitude)).title("My Location").icon(BitmapDescriptorFactory.fromBitmap(Utils.getBitmap("pointer_icon.png")))); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(dLatitude, dLongitude), 8)); } else { Toast.makeText(this, "Unable to fetch the current location", Toast.LENGTH_SHORT).show(); } } 

Assurez-vous également que le

setMyLocationEnabled

est défini sur true .

Essayez de voir si cela fonctionne …

Avez-vous essayé GoogleMap.getMyLocation() ?

Je viens de trouver cet extrait de code simple et fonctionnel, essayez:

 public class MainActivity extends ActionBarActivity implements ConnectionCallbacks, OnConnectionFailedListener { ... @Override public void onConnected(Bundle connectionHint) { mLastLocation = LocationServices.FusedLocationApi.getLastLocation( mGoogleApiClient); if (mLastLocation != null) { mLatitudeText.setText(Ssortingng.valueOf(mLastLocation.getLatitude())); mLongitudeText.setText(Ssortingng.valueOf(mLastLocation.getLongitude())); } }} 

voici le lien du tutoriel: Obtenir le dernier emplacement connu

essaye ça

 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { mMap.setMyLocationEnabled(true); } else { // Show rationale and request permission. } 

Essaye ça

 public class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location loc) { loc.getLatitude(); loc.getLongitude(); Ssortingng Text = “My current location is: ” + “Latitud = ” + loc.getLatitude() + “Longitud = ” + loc.getLongitude(); Toast.makeText( getApplicationContext(),Text, Toast.LENGTH_SHORT).show(); tvlat.setText(“”+loc.getLatitude()); tvlong.setText(“”+loc.getLongitude()); this.gpsCurrentLocation(); } 

Il donnera l’emplacement actuel.

 mMap.setMyLocationEnabled(true); Location userLocation = mMap.getMyLocation(); LatLng myLocation = null; if (userLocation != null) { myLocation = new LatLng(userLocation.getLatitude(), userLocation.getLongitude()); mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, mMap.getMaxZoomLevel()-5)); 

Une seule condition, j’ai testé que ce n’était pas nul, si vous laissez suffisamment de temps à l’utilisateur pour toucher le bouton “get my location”, alors il n’aura pas de valeur nulle.

la réponse acceptée fonctionne, mais certaines des méthodes utilisées sont maintenant obsolètes. Je pense donc que je préfère répondre à cette question avec des méthodes mises à jour.

c’est la réponse est complètement de ce guide sur les développeurs de google

alors voici un guide étape par étape:

  1. mettre en œuvre tout cela dans l’activité de votre carte

    MapActivity extends FragmentActivity implements OnMapReadyCallback, GoogleApiClient.OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks

  2. dans votre onCreate :

     private GoogleMap mMap; private Context context; private TextView txtStartPoint,txtEndPoint; private GoogleApiClient mGoogleApiClient; private Location mLastKnownLocation; private LatLng mDefaultLocation; private CameraPosition mCameraPosition; private boolean mLocationPermissionGranted; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); context = this; mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addConnectionCallbacks(this) .addApi(LocationServices.API) .addApi(Places.GEO_DATA_API) .addApi(Places.PLACE_DETECTION_API) .build(); mGoogleApiClient.connect(); } 
  3. dans votre onConnected :

     SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(map); mapFragment.getMapAsync(this); 
  4. dans votre onMapReady :

     @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Do other setup activities here too, as described elsewhere in this tutorial. // Turn on the My Location layer and the related control on the map. updateLocationUI(); // Get the current location of the device and set the position of the map. getDeviceLocation(); } 
  5. et ces deux méthodes sont utilisées dans onMapReady :

     private void updateLocationUI() { if (mMap == null) { return; } if (ContextCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { mLocationPermissionGranted = true; } if (mLocationPermissionGranted) { mMap.setMyLocationEnabled(true); mMap.getUiSettings().setMyLocationButtonEnabled(true); } else { mMap.setMyLocationEnabled(false); mMap.getUiSettings().setMyLocationButtonEnabled(false); mLastKnownLocation = null; } } private void getDeviceLocation() { if (ContextCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { mLocationPermissionGranted = true; } if (mLocationPermissionGranted) { mLastKnownLocation = LocationServices.FusedLocationApi .getLastLocation(mGoogleApiClient); } // Set the map's camera position to the current location of the device. float DEFAULT_ZOOM = 15; if (mCameraPosition != null) { mMap.moveCamera(CameraUpdateFactory.newCameraPosition(mCameraPosition)); } else if (mLastKnownLocation != null) { mMap.moveCamera(CameraUpdateFactory.newLatLngZoom( new LatLng(mLastKnownLocation.getLatitude(), mLastKnownLocation.getLongitude()), DEFAULT_ZOOM)); } else { Log.d("pouya", "Current location is null. Using defaults."); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mDefaultLocation, DEFAULT_ZOOM)); mMap.getUiSettings().setMyLocationButtonEnabled(false); } } 

c’est très rapide, lisse et efficace. J’espère que cela t’aides

Je préfère utiliser FusedLocationApi car OnMyLocationChangeListener est obsolète.

Déclarez d’abord ces 3 variables:

 private LocationRequest mLocationRequest; private GoogleApiClient mGoogleApiClient; private LocationListener mLocationListener; 

Définir les méthodes:

 private void initGoogleApiClient(Context context) { mGoogleApiClient = new GoogleApiClient.Builder(context).addApi(LocationServices.API).addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { mLocationRequest = LocationRequest.create(); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); mLocationRequest.setInterval(1000); setLocationListener(); } @Override public void onConnectionSuspended(int i) { Log.i("LOG_TAG", "onConnectionSuspended"); } }).build(); if (mGoogleApiClient != null) mGoogleApiClient.connect(); } private void setLocationListener() { mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { Ssortingng lat = Ssortingng.valueOf(location.getLatitude()); Ssortingng lon = Ssortingng.valueOf(location.getLongitude()); Log.i("LOG_TAG", "Latitude = " + lat + " Longitude = " + lon); } }; LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationListener); } private void removeLocationListener() { LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, mLocationListener); } 
  • initGoogleApiClient() est utilisé pour initialiser l’object GoogleApiClient
  • setLocationListener() est utilisé pour configurer un écouteur de changement d’emplacement
  • removeLocationListener() est utilisé pour supprimer l’écouteur

Appelez la méthode initGoogleApiClient pour que le code fonctionne initGoogleApiClient 🙂 N’oubliez pas de supprimer le programme d’écoute ( mLocationListener ) à la fin pour éviter les problèmes de fuite de mémoire.