Search code examples
androidgeolocationandroid-permissions

App quits after deliberately not giving location permission


This issue happens when I deliberately don't do anything when the permission request screen pops up, the app will just crash after a few seconds.

The permission requests pop up after transitioned from another activity (LoginActivity) to 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);
    }
}

Solution

  • Just realised how to solve this with a simpled solution lmao... In my original code, I have onRequestPermissionResult() already btw.

    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();
    
        }
    }
    

    No more crashing now :)