Stu*_*ing 4 android android-permissions
我的应用程序面向 Android API 28。
根据文档,我应该请求ACCESS_BACKGROUND_LOCATION,以及ACCESS_FINE_LOCATION在 Android API 上运行时< 29。
我曾尝试这样做,但在onRequestPermissionResults(),ACCESS_BACKGROUND_LOCATION从未被授予并返回PackageManager.PERMISSION_DENIED。我的印象是,在 < 请求另一个前台权限时,这将被隐式授予29。
或者,我可以从 API < 上的请求中删除许可29,一切似乎都按预期工作,但我意识到我会违反文档。
题
我是否可以省略ACCESS_BACKGROUND_LOCATION对 Android 版本 < 29的显式请求,并且仍然按预期工作,同时符合有效的 API29中的文档?
该文件指出:
如果您的应用面向 Android 10(API 级别 29)或更低版本,请完成以下步骤以请求 ACCESS_BACKGROUND_LOCATION:
在您的应用清单中包含 ACCESS_BACKGROUND_LOCATION 权限以及 ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION 权限。
请求 ACCESS_BACKGROUND_LOCATION 权限,以及其他位置权限之一:ACCESS_COARSE_LOCATION 或 ACCESS_FINE_LOCATION。您可以在单个操作中请求这些权限。
这有点模棱两可,因为他们没有提到有关如何实现的具体细节,但是 ACCESS_BACKGROUND_LOCATION 是在 API 29 中添加的,因此它在 API 28 及更低版本中不存在。
显然,过去并非如此,但现在如果您尝试将其用于较低的 API 级别,则会收到警告:
您可以省略ACCESS_BACKGROUND_LOCATION对 API 28 或更低版本的请求:
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
)
}
}
Run Code Online (Sandbox Code Playgroud)
此处提供完整代码:https : //stackoverflow.com/a/40142454/4409409
| 归档时间: |
|
| 查看次数: |
2661 次 |
| 最近记录: |