我正在使用新的Android API 23
. 如果我想显示用户的位置,我只需要map.setMyLocationEnabled(true)
. 如果我有权限,我可以看到用户的位置,如果我没有权限,我不会进行此 API 调用,但是在请求权限并且用户接受授予位置权限后,我无法使用用户的位置更新地图。我尝试了两种方法:
方法1(重建地图):
private void populateMap() {
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap map) {
...
if (PermissionsManager.getInstance().hasLocationPermissions(getActivity())) {
map.setMyLocationEnabled(true);
} else {
request permissions...
}
...
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PermissionsManager.LOCATION_PERMISSION_REQUEST: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
populateMap();
}
return;
}
}
}
方法2(使用地图实例并更新它):
private void populateMap() {
mapFragment.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
...
if (PermissionsManager.getInstance().hasLocationPermissions(getActivity())) {
map.setMyLocationEnabled(true);
} else {
request permissions...
}
...
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PermissionsManager.LOCATION_PERMISSION_REQUEST: {
if (mMap!= null && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mMap.setMyLocationEnabled(true);
}
return;
}
}
}
在这两种方法中,都会显示位置按钮,但不会显示带有用户位置的蓝点。我在这里想念什么?谢谢。
ps:当然,如果我杀死我的 Fragment 并再次启动它,一切正常,当我必须提示用户提供权限,然后在用户授权后使用我的位置更新地图时,就会发生此问题。