Приложение закрывается после того, как намеренно не дал разрешение на местоположение

1

Эта проблема возникает, когда я сознательно ничего не делаю, когда всплывает экран запроса разрешения, через несколько секунд приложение просто падает.

Запросы на разрешение появляются после перехода из другого действия (LoginActivity) в MapsActivity.

LoginActivity

if statement to check the validity
    if valid
        Intent intent = new Intent(LoginActivity.this,MapActivity.class);
        startActivity(intent);
        finish();

MapActivity

...    
public void onMapReady(GoogleMap map) {
    mMap = map;
    getLocationPermission();
    updateLocationUI();
    getDeviceLocation();
}

private void getLocationPermission() {
    if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        mLocationPermissionGranted = true;
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
    }
}
Теги:
geolocation
android-permissions

2 ответа

0

Просто понял, как решить эту проблему с помощью упрощенного решения lmao... В моем исходном коде у меня уже есть onRequestPermissionResult().

MapActivity

private boolean mLocationPermissionGranted;

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    mLocationPermissionGranted = false;
    switch (requestCode) {
        case PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                mLocationPermissionGranted = true;
            }
        }
    }
    updateLocationUI();
}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
...
getLocationPermission();
    if(mLocationPermissionGranted){
        updateLocationUI();
        getDeviceLocation();

    }
}

Больше не сбои сейчас :)

0

я проверяю разрешение таким образом, и это работает правильно, попробуйте это: -

if (checkLocationPermission()) {
                    Log.e("Tag", "Camera and External storage Permission are allowed");
                } else {
                    requestLocationPermission();
                } 

это метод checkLocationPermission: -

private boolean checkLocationPermission() {
        int result = ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

это метод запроса для определения местоположения:

private void requestLocationPermission() {
        if (ActivityCompat.shouldShowRequestPermissionRationale
                        (this, Manifest.permission.ACCESS_FINE_LOCATION)) {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(this, R.style.DialogTheme);
            alertDialog.setMessage("You Have To Give Permission From Your Device Setting To go in Setting Please Click on Settings Button");
            alertDialog.setCancelable(false);
            alertDialog.setPositiveButton("Go To Settings", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            });
            alertDialog.show();
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1012);
        }
    }

и, наконец, onRequestPermissionsResult: -

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(this, R.style.DialogTheme);
            alertDialog.setMessage("You Have To Give Permission From Your Device Setting To go in Setting Please Click on Settings Button");
            alertDialog.setCancelable(false);
            alertDialog.setPositiveButton("Go To Settings", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            });
            alertDialog.show();
        }else{
          // do your stuff in case accept permission
        }

    }
  • 0
    Оставьте комментарий, если у вас есть запрос или цените ответ, если он поможет вам
  • 0
    ACCESS_FINE_LOCATION всегда был в файле манифеста.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню