Android Google Maps API V2 Zoom a la ubicación actual

Estoy tratando de jugar con la API de Maps V2 para familiarizarme con ella, y estoy tratando de iniciar el mapa centrado en la ubicación actual del usuario. Usando map.setMyLocationEnabled(true); statement, puedo mostrar mi ubicación actual en el mapa. Esto también agrega el botón a la IU que centra el mapa en mi ubicación actual.

Quiero simular ese botón presiona mi código. Estoy familiarizado con las clases LocationManager y LocationListener y me doy cuenta de que usarlas es una alternativa viable, pero la funcionalidad para centrar y ampliar la ubicación del usuario parece estar integrada en el botón.

Si la API tiene un método para mostrar la ubicación actual del usuario, seguramente debe haber una manera más fácil de centrarse en la ubicación que utilizar las clases LocationManager / LocationListener , ¿verdad?

Prueba esta encoding:

 LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Criteria criteria = new Criteria(); Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); if (location != null) { map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 13)); CameraPosition cameraPosition = new CameraPosition.Builder() .target(new LatLng(location.getLatitude(), location.getLongitude())) // Sets the center of the map to location user .zoom(17) // Sets the zoom .bearing(90) // Sets the orientation of the camera to east .tilt(40) // Sets the tilt of the camera to 30 degrees .build(); // Creates a CameraPosition from the builder map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); } 

Después de que instansiated el objeto del mapa (del fragmento) agregue esto –

 private void centerMapOnMyLocation() { map.setMyLocationEnabled(true); location = map.getMyLocation(); if (location != null) { myLocation = new LatLng(location.getLatitude(), location.getLongitude()); } map.animateCamera(CameraUpdateFactory.newLatLngZoom(myLocation, Constants.MAP_ZOOM)); } 

si necesita alguna guía, solo pregunte, pero debe ser autoexplicativa: simplemente instale el objeto myLocation para un valor predeterminado …

  mMap.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { @Override public void onMyLocationChange(Location location) { CameraUpdate center=CameraUpdateFactory.newLatLng(new LatLng(location.getLatitude(), location.getLongitude())); CameraUpdate zoom=CameraUpdateFactory.zoomTo(11); mMap.moveCamera(center); mMap.animateCamera(zoom); } }); 
 youmap.animateCamera(CameraUpdateFactory.newLatLngZoom(currentlocation, 16)); 

16 es el nivel de zoom

prueba este código:

 private GoogleMap mMap; LocationManager locationManager; private static final String TAG = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(map); mapFragment.getMapAsync(this); arrayPoints = new ArrayList(); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); LatLng myPosition; if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } googleMap.setMyLocationEnabled(true); LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); String provider = locationManager.getBestProvider(criteria, true); Location location = locationManager.getLastKnownLocation(provider); if (location != null) { double latitude = location.getLatitude(); double longitude = location.getLongitude(); LatLng latLng = new LatLng(latitude, longitude); myPosition = new LatLng(latitude, longitude); LatLng coordinate = new LatLng(latitude, longitude); CameraUpdate yourLocation = CameraUpdateFactory.newLatLngZoom(coordinate, 19); mMap.animateCamera(yourLocation); } } 

}

No olvide agregar permisos en AndroidManifest.xml.

    
 private void setUpMapIfNeeded(){ if (mMap == null){ mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();//invoke of map fragment by id from main xml file if (mMap != null) { mMap.setMyLocationEnabled(true);//Makes the users current location visible by displaying a blue dot. LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);//use of location services by firstly defining location manager. String provider=lm.getBestProvider(new Criteria(), true); if(provider==null){ onProviderDisabled(provider); } Location loc=lm.getLastKnownLocation(provider); if (loc!=null){ onLocationChanged(loc); } } } } // Initialize map options. For example: // mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); @Override public void onLocationChanged(Location location) { LatLng latlng=new LatLng(location.getLatitude(),location.getLongitude());// This methods gets the users current longitude and latitude. mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng));//Moves the camera to users current longitude and latitude mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latlng,(float) 14.6));//Animates camera and zooms to preferred state on the user's current location. } // TODO Auto-generated method stub 

Esto está funcionando Ubicación actual con zoom para Google Map V2

  double lat= location.getLatitude(); double lng = location.getLongitude(); LatLng ll = new LatLng(lat, lng); googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ll, 20)); 

Aquí le mostramos cómo hacerlo dentro de ViewModel y FusedLocationProviderClient , código en Kotlin

 locationClient.lastLocation.addOnSuccessListener { location: Location? -> location?.let { val position = CameraPosition.Builder() .target(LatLng(it.latitude, it.longitude)) .zoom(15.0f) .build() map.animateCamera(CameraUpdateFactory.newCameraPosition(position)) } }