如何修复“代码应明确检查权限是不是可用”错误
Posted
技术标签:
【中文标题】如何修复“代码应明确检查权限是不是可用”错误【英文标题】:How to fix " code should explicitly check to see if permission is available " error如何修复“代码应明确检查权限是否可用”错误 【发布时间】:2020-12-09 16:43:37 【问题描述】:我有一个旨在获取用户当前位置的简单片段。
我得到的错误很清楚,我们需要检查用户是否授予我们位置权限:
调用需要权限,可能会被用户拒绝:代码应该 明确检查权限是否可用(使用 checkPermission) 或显式处理潜在的 SecurityException
但是我已经做了权限检查,基本上没有用户授权就无法获取,为什么还要检查两次呢?
我的流程是这样的:
if (activityListener.checkPermissions())
showMapAndFetchLocation()
showMapAndFetchLocation
方法内部
initLocationProvider()
val mapFragment =
childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(callback)
最后,在initLocationProvider
方法中
if (isLocationEnabled())
fusedLocationClient //**Error**
.lastLocation //**Error**
.addOnCompleteListener task: Task<Location> ->
val location = task.result
location?.let
Log.d(TAG, "getUserLastLocation: LAT $it.latitude")
Log.d(TAG, "getUserLastLocation: LNG $it.longitude")
?: requestNewLocationData()
如您所见,我正在检查第一个 if (activityListener.checkPermissions())
,然后才触发获取过程。
我真的需要检查两次还是我做错了什么?
【问题讨论】:
只需添加一个try/catch(SecurityException)
块,如果您在函数内调用checkPermission
,则lint 检查不会实现。
【参考方案1】:
按照@Pawel 的建议,我需要添加 try/catch 块并捕获 SecurityException 异常。
现在方法如下所示:
try
fusedLocationClient
.lastLocation
.addOnCompleteListener task: Task<Location> ->
val location = task.result
location?.let
Log.d(TAG, "getUserLastLocation: LAT $it.latitude")
Log.d(TAG, "getUserLastLocation: LNG $it.longitude")
setLngLat(it.latitude, it.longitude)
initMap()
?: requestNewLocationData()
catch (e: SecurityException)
activityListener.isLocationPermissionGranted()
【讨论】:
以上是关于如何修复“代码应明确检查权限是不是可用”错误的主要内容,如果未能解决你的问题,请参考以下文章