【发布时间】: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 检查不会实现。
标签: android kotlin android-location fusedlocationproviderapi