问题
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;
}
});
回答1:
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);
}
}
回答2:
The last line was a solution for me:
myMap.setMyLocationEnabled(true);
myMap.getUiSettings().setMyLocationButtonEnabled(true);
回答3:
Have you tried to get your latitude and longitude, after using
setmylocationenabled(true)
?
example
gMap.setMyLocationEnabled(true);
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
gMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
you can now use your latitude and longitude, and animate the camera to the lat/lng location that you get.Hope it helps.
回答4:
You should add setMyLocationEnabled (boolean enabled) .
Enables or disables the my-location layer.
While enabled and the location is available, the my-location layer continuously draws an indication of a user's current location and bearing, and displays UI controls that allow a user to interact with their location (for example, to enable or disable camera tracking of their location and bearing).
In order to use the my-location-layer feature you need to request permission for either ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION unless you have set a custom location source.
DEMO
You should add this in onMapReady (GoogleMap googleMap) section.
@Override
public void onMapReady(GoogleMap googleMap) {
googleMapOBJ = googleMap;
if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(activity, 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;
}
googleMapOBJ.setMyLocationEnabled(true);
googleMapOBJ.getUiSettings().setMyLocationButtonEnabled(true);
回答5:
Kotlin way
mMap = googleMap
mMap.isMyLocationEnabled = true
mMap.uiSettings.isMyLocationButtonEnabled = true
来源:https://stackoverflow.com/questions/34608517/map-setmylocationenabledtrue-not-working