要求获得位置许可,grantResults为空

时间:2018-03-11 18:06:25

标签: android google-maps kotlin android-permissions

我在寻找位置许可方面遇到了一些麻烦。该活动扩展了AppCompatActivity

这是请求

if (ActivityCompat.checkSelfPermission(this,
    android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(this,
    arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), LOCATION_PERMISSION_RC)

    return
}

这就是我检查响应的方式

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    if (requestCode == LOCATION_PERMISSION_RC) {
        if (grantResults.isNotEmpty()) {
            if ( grantResults[0] == PackageManager.PERMISSION_GRANTED ) {
                // permission was granted
                Toast.makeText(this, "Permission granted", Toast.LENGTH_LONG).show()
                setUpMap()
                startLocationUpdates()
            } else {
                Toast.makeText(this, "Permission denied", Toast.LENGTH_LONG).show()
            }
        } else {
            Toast.makeText(this, "grantResults is empty", Toast.LENGTH_LONG).show()
        }
    }
}

如果我授予权限,应用程序会显示toast消息,其中表示grantArray为空,但实际上已授予权限,我可以使用MyLocation层。

根据documentation

  

grantResults - int:相应权限的授权结果为PERMISSION_GRANTEDPERMISSION_DENIED。永远不会null

当我得到一个空数组时。

这不是一个真正的问题,因为它足以删除吐司,但我想了解为什么会发生这种情况以及如何解决这种问题。

编辑:

我在if语句中添加了一些调试行,一条日志消息,另一条作为onRequestPermissionsResult()内的第一条指令,我发现当包含地图的活动开始时, onRequestPermissionsResult()被调用,grantResults为空,因为我还没有批准或拒绝许可。现在,当我点击Allow时,第二次调用函数onRequestPermissionsResult(),在这种情况下会显示消息Permission granted

新的疑问是:在活动开始时调用函数onRequestPermissionsResult()是否正常? ActivityCompat.checkSelfPermission()是否触发onRequestPermissionsResult()检查权限?

1 个答案:

答案 0 :(得分:0)

我认为您的许可请求因某种原因被取消。

  

//如果取消请求,结果数组为空。   https://developer.android.com/training/permissions/requesting#handle-response