检查方法中的 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
因此我不能将它委托给方法,因为 lint 和 editor 将其显示为 错误。
是否有一些注释可以写在我的实用方法上并抑制 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 权限的主要内容,如果未能解决你的问题,请参考以下文章