Android Studio - remove Security Exception warning

僤鯓⒐⒋嵵緔 提交于 2019-11-27 17:04:36

问题


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"})

回答1:


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.




回答2:


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) {
  ...
}



回答3:


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



来源:https://stackoverflow.com/questions/35124794/android-studio-remove-security-exception-warning

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!