Android Studio - 删除安全异常警告

Jyo*_*ngh 53 android suppress-warnings android-studio runtime-permissions

我正在通过用户的位置

Location location = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);
Run Code Online (Sandbox Code Playgroud)

这行代码在方法内部,在调用此方法之前,我会检查Android运行时权限.只有当用户可以获得权限时,我才会调用此方法.代码工作得很好.

问题是Android Studio仍然在此行上显示错误,而不是在调用此函数之前已经检查过我已经检查过.

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`
Run Code Online (Sandbox Code Playgroud)

现在我该如何删除此警告?我已经检查了权限,并且不想再次检查只是为了删除此警告.我已经尝试添加@SuppressWarnings(),但不知道要传递给它的确切字符串. @SuppressWarnings({"all"})有效,但显然不推荐.

如何删除此警告?

编辑1:这是我的确切代码 -

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);
}
Run Code Online (Sandbox Code Playgroud)

但是如果我将权限检查放在getLocation()方法中,那么警告就会消失.@SuppressWarnings({"MissingPermission"})无效.

编辑2:我发现抑制警告的唯一方法是 -

在该特定代码段之上添加此注释 -

//noinspection ResourceType
Run Code Online (Sandbox Code Playgroud)

或者加上这个 -

@SuppressWarnings({"ResourceType"})
Run Code Online (Sandbox Code Playgroud)

Ren*_*nza 121

您正在寻找(更新以提高清晰度):

@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);


       }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正确的lint规则是MissingPermission,但似乎有一个错误,它错误地放在一些人身上.

所以,请尝试@SuppressWarnings({"ResourceType"}).

  • {"ResourceType"}正在运行,但{"MissingPermission"}不是.-0-A (3认同)

Tob*_*run 5

如果您要忽略此lint警告,可以内联执行此操作:

//noinspection MissingPermission
Location lastLocation = FusedLocationApi.getLastLocation(locationClient);
Run Code Online (Sandbox Code Playgroud)

或在方法层面:

@SuppressWarnings({"MissingPermission"})
public void toggleGPS(boolean enableGPS) {
  ...
}
Run Code Online (Sandbox Code Playgroud)