Android Studio - remove Security Exception warning

AndroidAndroid StudioSuppress WarningsRuntime Permissions

Android Problem Overview


I'm getting the user's location through

Location location = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);

This line of code is inside a method and before calling this method I do check for Android run time permissions. Only if the permission is available from the user then I call this method. Code is working perfectly.

The problem is that Android Studio still shows an error on this line not recognising that I've already checked before calling this function.

Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException`

Now how do I remove this warning? I've already checked for permissions and don't want to check again just to remove this warning. I've tried adding @SuppressWarnings() but don't know the exact String to pass into this. @SuppressWarnings({"all"}) works but it is obviously not recommended.

How do I remove this warning?

EDIT 1 : This is my exact code -

private void checkPermissions() {
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED)
        getLocation();  //Method called if I have permission
}

private void getLocation() {
    //Android studio shows warning at this line.
    Location location = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
}

But if I put the permission check inside getLocation() method then the warning disappears. @SuppressWarnings({"MissingPermission"}) did not work.

EDIT 2: I've discovered that the only way to suppress the warning are -

Adding this comment on top of that particular piece of code -

//noinspection ResourceType

or adding this -

@SuppressWarnings({"ResourceType"})

Android Solutions


Solution 1 - Android

You are looking for (updated to improve clarity):

@Override
@SuppressWarnings({"MissingPermission"})
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (LOCATION_REQUEST_CODE == requestCode) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);

            
       }
}

EDITED:

The correct lint rule is MissingPermission, but there seems to be a bug that misplace it to some people.

So, please try @SuppressWarnings({"ResourceType"}), too.

Solution 2 - Android

If you are looking to ignore this lint warning, you can either do this inline:

//noinspection MissingPermission
Location lastLocation = FusedLocationApi.getLastLocation(locationClient);

or at method level:

@SuppressWarnings({"MissingPermission"})
public void toggleGPS(boolean enableGPS) {
  ...
}

Solution 3 - Android

you can use Android Studio Inspection To Generate @SuppressWarnings({"MissingPermission"}) For Your Method Or Class

android studio missing permission check

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJyotman SinghView Question on Stackoverflow
Solution 1 - AndroidRenascienzaView Answer on Stackoverflow
Solution 2 - AndroidTobrunView Answer on Stackoverflow
Solution 3 - AndroidAhmad RonaghView Answer on Stackoverflow