Android Studio - 删除安全异常警告

Posted

技术标签:

【中文标题】Android Studio - 删除安全异常警告【英文标题】:Android Studio - remove Security Exception warning 【发布时间】:2016-05-09 13:34:17 【问题描述】:

我正在通过

获取用户的位置
Location location = LocationServices.FusedLocationApi.getLastLocation(
            mGoogleApiClient);

这行代码在一个方法中,在调用这个方法之前,我会检查 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`

现在如何删除此警告?我已经检查了权限,不想再次检查只是为了删除这个警告。我试过添加 @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);

但是如果我将权限检查放在 getLocation() 方法中,那么警告就会消失。 @SuppressWarnings("MissingPermission") 不起作用。

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

在特定代码的顶部添加此注释 -

//noinspection ResourceType

或添加这个 -

@SuppressWarnings("ResourceType")

【问题讨论】:

如果我在下面编辑的答案有效,请将其标记为已接受。 @SuppressWarnings("MissingPermission")放在你的函数实现上面 【参考方案1】:

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

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


       

已编辑:

正确的 lint 规则是 MissingPermission,但似乎有一个错误将它放错了位置。

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

【讨论】:

你确定吗?我将我的答案更新为最佳说明。此代码在我的 Android Studio(2.0-Preview 7)上解析和编译,没有任何警告,来自 gradle 或 lint。 你的清单文件上也声明了权限,对吧? 我的一切都是正确的。代码完美运行。只是想删除警告。检查我编辑的问题。 正是我要说的。 @SuppressWarnings("MissingPermission") 行正在删除对我的警告。 "ResourceType" 有效,但 "MissingPermission" 无效。 -0-a【参考方案2】:

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

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

或在方法级别:

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

【讨论】:

【参考方案3】:

您可以使用 Android Studio Inspection 来生成 @SuppressWarnings("MissingPermission") 用于您的方法或类

【讨论】:

以上是关于Android Studio - 删除安全异常警告的主要内容,如果未能解决你的问题,请参考以下文章

处理 Android Studio 的 NullPointerException lint 警告的正确方法

在Android Studio终端中运行时出现IO异常[重复]

我的应用程序上的 Android Studio 警告:app:stripDebugDebugSymbols UP-TO-DATE

删除 Android Studio 中的 .gradle 文件夹是不是安全?

列表视图和文本输入在 Java Android Studio 中工作异常

Error:(16, 16) 警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除