检查方法中的 Android 权限

Check Android Permissions in a Method

这是我的代码,它工作得很好

if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    mMap.setMyLocationEnabled(true);
}

但我不喜欢每次检查都写这么大的代码,想将它委托给我的实用程序中的一个方法 class。

if (Utils.hasMapLocationPermissions(getActivity())) {
    mMap.setMyLocationEnabled(true);
}

但是 setMyLocationEnabled 有注释 @RequiresPermission 因此我不能将它委托给一个方法,因为 linteditor 将其显示为 错误

是否有一些注释可以写在我的实用程序方法上并抑制 lint?

像这样

@ChecksPermission
public boolean hasMapLocationPermissions(Activity activity) {
  return // my checking logic..
}

您可以通过使用 @SuppressWarnings("MissingPermission") 注释您的方法来在编辑器和 lint 报告中抑制此错误,或者您可以通过在该行上方放置 //noinspection MissingPermission 来抑制单个语句的错误.

例如:

@SuppressWarnings("MissingPermission")
public boolean hasMapLocationPermissions(Activity activity) {
  // your checking logic
}

或者:

if (Utils.hasMapLocationPermissions(getActivity())) {
    //noinspection MissingPermission
    mMap.setMyLocationEnabled(true);
}

您可以重命名您的方法,例如checkLocationPermission(Activity activity)。我发现您的方法名称必须以“check”开头并以“Permission”结尾才能传递 Lint 警告。

例如:

public static boolean checkLocationPermission(Context context) {
    return ActivityCompat.checkSelfPermission(context,
            Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(context,
            Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}