Android Studio - 删除安全异常警告
Android Studio - remove Security Exception warning
我正在通过
获取用户的位置
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"})
您正在寻找(已更新以提高清晰度):
@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,但似乎有一个 bug 使某些人错放了它。
所以,也请尝试 @SuppressWarnings({"ResourceType"})。
如果您想忽略此 lint 警告,您可以直接执行以下操作:
//noinspection MissingPermission
Location lastLocation = FusedLocationApi.getLastLocation(locationClient);
或在方法级别:
@SuppressWarnings({"MissingPermission"})
public void toggleGPS(boolean enableGPS) {
...
}
您可以使用 Android Studio Inspection 来生成
@SuppressWarnings({"MissingPermission"})
为您的方法或 Class
我正在通过
获取用户的位置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"})
您正在寻找(已更新以提高清晰度):
@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,但似乎有一个 bug 使某些人错放了它。
所以,也请尝试 @SuppressWarnings({"ResourceType"})。
如果您想忽略此 lint 警告,您可以直接执行以下操作:
//noinspection MissingPermission
Location lastLocation = FusedLocationApi.getLastLocation(locationClient);
或在方法级别:
@SuppressWarnings({"MissingPermission"})
public void toggleGPS(boolean enableGPS) {
...
}
您可以使用 Android Studio Inspection 来生成
@SuppressWarnings({"MissingPermission"})
为您的方法或 Class