【问题标题】:Check Android Permissions in a Method检查方法中的 Android 权限
【发布时间】:2016-07-02 01:40:20
【问题描述】:

这是我的代码,它运行良好

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

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

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

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

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

类似的东西

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

【问题讨论】:

  • 尝试将setMyLocationEnabled 放入try-catch 并处理SecurityException。应该在没有注释的情况下工作。
  • 代码仍然很大,看起来很难看。我想用简洁的小代码来解决。

标签: android annotations coding-style lint error-suppression


【解决方案1】:

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

例如:

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

或者:

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

【讨论】:

  • 好答案,会等几天,如果是最好的答案,我会给你赏金。谢谢。
【解决方案2】:

您可以将您的方法重命名为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;
}

【讨论】:

  • 优秀的答案!我知道有这样的事情。谢谢你。现在我的代码看起来很棒,而且没有 lint 警告。
  • 哈哈,这样破解 lint 真是太好了
  • 对我来说只有 checkPermission() 方法名有效。
猜你喜欢
  • 2016-07-22
  • 2017-09-26
  • 2015-12-06
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 2017-10-05
相关资源
最近更新 更多