我在寻找位置许可方面遇到了一些麻烦。该活动扩展了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层。
grantResults
-int
:相应权限的授权结果为PERMISSION_GRANTED
或PERMISSION_DENIED
。永远不会null
。
当我得到一个空数组时。
这不是一个真正的问题,因为它足以删除吐司,但我想了解为什么会发生这种情况以及如何解决这种问题。
编辑:
我在if
语句中添加了一些调试行,一条日志消息,另一条作为onRequestPermissionsResult()
内的第一条指令,我发现当包含地图的活动开始时, onRequestPermissionsResult()
被调用,grantResults
为空,因为我还没有批准或拒绝许可。现在,当我点击Allow
时,第二次调用函数onRequestPermissionsResult()
,在这种情况下会显示消息Permission granted
。
新的疑问是:在活动开始时调用函数onRequestPermissionsResult()
是否正常? ActivityCompat.checkSelfPermission()
是否触发onRequestPermissionsResult()
检查权限?
答案 0 :(得分:0)
我认为您的许可请求因某种原因被取消。
//如果取消请求,结果数组为空。 https://developer.android.com/training/permissions/requesting#handle-response