ACCESS_BACKGROUND_LOCATION 不适用于低于 Q (29) Android 的版本
ACCESS_BACKGROUND_LOCATION Not Working on Lower Than Q (29) Android Versions
我的应用针对 Android API 28.
根据 documentation,我应该在 Android 运行 上请求 ACCESS_BACKGROUND_LOCATION
以及 ACCESS_FINE_LOCATION
< 29
。
我试过这样做,但在 onRequestPermissionResults()
中,ACCESS_BACKGROUND_LOCATION
从未被授予并且 returns PackageManager.PERMISSION_DENIED
。我的印象是,在 < 29
.
上请求另一个前台权限时,这将被隐式授予
或者,我可以从 API < 29
的请求中删除权限,一切似乎都按预期工作,但我意识到我会违反文档。
问题
我可以在 Android 版本 < 29 上省略对 ACCESS_BACKGROUND_LOCATION
的明确请求,并且仍然按预期工作,同时符合 API 29
中的文档吗?
文档指出:
If your app targets Android 10 (API level 29) or lower, complete the
following steps to request ACCESS_BACKGROUND_LOCATION:
Include the ACCESS_BACKGROUND_LOCATION permission, as well as either
the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission, in your
app's manifest.
Request the ACCESS_BACKGROUND_LOCATION permission, as well as one of
the other location permissions: ACCESS_COARSE_LOCATION or
ACCESS_FINE_LOCATION. You can request these permissions in a single
operation.
这有点模棱两可,因为他们没有提到具体如何实现,但是 ACCESS_BACKGROUND_LOCATION 是在 API 29 中添加的,所以它不存在于 API 28岁及以下。
显然过去不是这种情况,但现在如果您尝试将它用于较低的 API 级别,您会收到警告:
您可以在 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
)
}
}
此处提供完整代码:
我的应用针对 Android API 28.
根据 documentation,我应该在 Android 运行 上请求 ACCESS_BACKGROUND_LOCATION
以及 ACCESS_FINE_LOCATION
< 29
。
我试过这样做,但在 onRequestPermissionResults()
中,ACCESS_BACKGROUND_LOCATION
从未被授予并且 returns PackageManager.PERMISSION_DENIED
。我的印象是,在 < 29
.
或者,我可以从 API < 29
的请求中删除权限,一切似乎都按预期工作,但我意识到我会违反文档。
问题
我可以在 Android 版本 < 29 上省略对 ACCESS_BACKGROUND_LOCATION
的明确请求,并且仍然按预期工作,同时符合 API 29
中的文档吗?
文档指出:
If your app targets Android 10 (API level 29) or lower, complete the following steps to request ACCESS_BACKGROUND_LOCATION:
Include the ACCESS_BACKGROUND_LOCATION permission, as well as either the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission, in your app's manifest.
Request the ACCESS_BACKGROUND_LOCATION permission, as well as one of the other location permissions: ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION. You can request these permissions in a single operation.
这有点模棱两可,因为他们没有提到具体如何实现,但是 ACCESS_BACKGROUND_LOCATION 是在 API 29 中添加的,所以它不存在于 API 28岁及以下。
显然过去不是这种情况,但现在如果您尝试将它用于较低的 API 级别,您会收到警告:
您可以在 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
)
}
}
此处提供完整代码: