这是我的地图片段:
public class MapFragmentTab extends Fragment implements OnMapReadyCallback {
private GoogleMap googleMap;
private GoogleApiClient mGoogleApiClient;
private static final int MY_PERMISSION_LOCATION = 1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.map_fragment_tab, container, false);
init();
return rootView;
}
private void init() {
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(LocationServices.API)
.build();
}
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
mapView = rootView.findViewById(R.id.mapView);
if (mapView != null) {
mapView.onCreate(null);
mapView.onResume();
mapView.getMapAsync(this);
}
}
@Override
public void onMapReady(GoogleMap map) {
googleMap = map;
int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION);
} else {
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
// some code here
}
}
在 Android 4.3 上一切正常。
但是,当我第一次在 Android 6.0 + 上开始时,请显示提示对话框以获取权限。像这样:
Allow My application to access this device's location?
Deny Allow
我点击允许,但方法onRequestPermissionsResult
未调用。
我的代码出了什么问题?
答案 0 :(得分:1)
而不是打电话
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION)
像这样打电话
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION, PERMISSIONS_CODE)
当您使用android.support.v4.app.Fragment
时,您必须致电requestPermissions
。
在AppCompatActivity
时,您应该使用ActivityCompat.requestPermissions
;
答案 1 :(得分:0)
不会在片段中触发权限结果回调。为此,您应该在活动中实现 onRequestPermissionsResult 并将回调转移到片段。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[]
permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if (fragments != null) {
for (Fragment fragment : fragments) {
fragment.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}