检查方法中的 Android 权限

Posted

技术标签:

【中文标题】检查方法中的 Android 权限【英文标题】:Check Android Permissions in a Method 【发布时间】: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。应该在没有注释的情况下工作。 代码仍然很大,看起来很难看。我想用简洁的小代码来解决。 【参考方案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() 方法名有效。

以上是关于检查方法中的 Android 权限的主要内容,如果未能解决你的问题,请参考以下文章

Android M请求权限非活动

android获取GPS权限

android获取GPS权限

android获取GPS权限

如何在android中检查root访问权限?

Android:检查是不是在另一个类中授予权限,而不是在 MainActivity