Я занимаюсь разработкой приложения, основной функцией которого является просмотр данных на карте.
Для этого мне нужно получить текущую позицию, а для этого я прошу пользователя.
Но если пользователь отклоняет разрешения, каков наилучший способ запросить его снова?
Я пытаюсь спросить снова в onRequestPermissionsResult
, но приложение вылетает.
Есть идеи?
Код:
private void enableMyLocationIfPermitted() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
if (mapViewModel.getGoogleMap() != null) {
mapViewModel.getGoogleMap().setMyLocationEnabled(true);
} else {
Log.e(TAG, "No Google Map available in view model");
}
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
}
}
@Override
public void onMapReady(GoogleMap googleMap) {
Log.d(TAG, "Map is ready");
googleMap.setOnMarkerClickListener(this);
googleMap.getUiSettings().setRotateGesturesEnabled(false);
googleMap.getUiSettings().setMyLocationButtonEnabled(false);
mapViewModel.setGoogleMap(googleMap);
enableMyLocationIfPermitted();
getLastLocationIfPermitted();
mapViewModel.loadData();
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case LOCATION_PERMISSION_REQUEST_CODE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
enableMyLocationIfPermitted();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
Toast.makeText(this, getResources().getText(R.string.you_need_permissions), Toast.LENGTH_LONG).show();
}
return;
}
}
}
Ошибка:
java.lang.StackOverflowError: размер стека 8 МБ
Спасибо