Venu Saini Venu Saini - 1 month ago 56
Android Question

map.setmylocationenabled(true) not working

I'm working with Google Maps in my android app. I need to recenter the map to the client's current location. I used the following statement -

map.setmylocationenabled(true);


This displays a button on the top right but clicking that doesn't work.

The button click listener:

mMap.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() {
@Override
public boolean onMyLocationButtonClick() {
mMap.addMarker(new MarkerOptions().position(myLatLng).title("My Location"));
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(myLatLng, zoomLevel));
return false;
}
});

Answer

Just take the code from my other answer here, and modify your button click listener to request another location:

         mMap.setOnMyLocationButtonClickListener(new GoogleMap.OnMyLocationButtonClickListener() {
                @Override
                public boolean onMyLocationButtonClick() {
                     if (mGoogleApiClient != null) {
                         LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
                     }
                     return false;
                }
            });

The code in onLocationChanged() will then re-center the camera position, and then un-register for location updates again:

@Override
public void onLocationChanged(Location location)
{
    mLastLocation = location;
    if (mCurrLocationMarker != null) {
        mCurrLocationMarker.remove();
    }

    //Place current location marker
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(latLng);
    markerOptions.title("Current Position");
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
    mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

    //move map camera
    mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));

    if (mGoogleApiClient != null) {
        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }
}