文档说明:
如果您的应用程序针对Android 10(API级别29)或更低版本,请完成以下步骤请求ACCESS_BACKGROUND_LOCATION:
1.在应用程序清单中包括ACCESS_BACKGROUND_LOCATION权限以及ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限之一。
2.请求ACCESS_BACKGROUND_LOCATION权限以及其中一个其他位置权限:ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION。您可以在单个操作中请求这些权限。
这有点含糊不清,因为他们没有提到如何实现的具体细节,但ACCESS_BACKGROUND_LOCATION是在API 29中添加的,因此在API 28及更低版本中不存在。
显然,过去情况并非如此,但现在如果您尝试在较低的API级别中使用它,则会收到警告:
![enter image description here](https://istack.dev59.com/FRcEw.webp)
在API 28或更低版本中,您可以忽略对ACCESS_BACKGROUND_LOCATION
的请求:
private fun requestLocationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
),
MY_PERMISSIONS_REQUEST_LOCATION
)
} else {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
MY_PERMISSIONS_REQUEST_LOCATION
)
}
}
完整的代码可以在这里找到:https://dev59.com/QlkS5IYBdhLWcg3wRUgU#40142454
ACCESS_BACKGROUND_LOCATION
在 API 29 中添加,因此在 API 28 及更低版本中不存在。文档可能在谈论运行于 Android 10 或 11 时会发生什么,但并不是非常清楚。当您进行测试时,自动拒绝的是哪个 Android 版本? - Daniel Nugent29
进行编译,但目标是API28
。在测试时,我主要测试了23
,当然也测试了29
。 - StuStirling