【发布时间】:2021-05-07 06:44:26
【问题描述】:
我正在实施应用权限流程以使用地理位置。我在 Fragment 中通过 requestPermissions() 请求了 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION。
requestPermissions(
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION
)
companion object {
private const val PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1
:
}
我在 Fragment 中通过 onRequestPermissionsResult() 收到了请求权限结果。
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when (requestCode) {
PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION -> {
if (grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// User granted permission in system dialog
} else {
// User denied permissions
}
}
}
}
但奇怪的是 onRequestPermissionsResult() 只收到了单个权限,即第二个参数中的 ACCESS_COARSE_LOCATION 作为权限:数组。 即使在系统对话框中选择允许,checkSelfPermission() 也会返回 false。
// this condition returns false after receiving permission result on onRequestPermissionsResult()
ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.ACCESS_COARSE_LOCATION) {
}
我想知道为什么 onRequestPermissionsResult() 只收到 ACCESS_COARSE_LOCATION 作为结果,即使我在调用 requestPermissions() 时通过提供 ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION 数组来请求多个权限。
能否请您解释一下为什么权限请求只返回单个权限结果?
提前感谢您的帮助。
【问题讨论】:
标签: android permissions location