【问题标题】: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 检查不会实现。

标签: android kotlin android-location fusedlocationproviderapi


【解决方案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()
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2015-09-30
    • 2013-12-09
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多