如何在用户授予位置权限时检测 "Allow only while using the app" 权限
How to detect "Allow only while using the app" permission when user give location permission
这是一个基本问题,但我找不到针对这种情况的解决方案。我使用“Dexter”库来请求运行时权限。我需要获得后台位置权限以便请求权限,然后我在 Android Q 中看到有一个选项“仅在使用应用程序时允许”,但是在使用 dexter 时我无法检测到用户何时选择这个选项。谁能帮我解决这个问题?
您是否尝试过 Dexter 团队解释的那个? (那里有请求 ACCESS_BACKGROUND_LOCATION 权限的示例)
Application stuck when requesting ACCESS_BACKGROUND_LOCATION
并且在 Google 的官方 API 中,他们提到了后台位置检查的新增功能:ACCESS_BACKGROUND_LOCATION
Background location access checklist
此 API 专门为此添加:检查用户在使用应用程序时是否选择允许位置(或意味着,应用程序在前台,而不是后台)
我来晚了。但我对您和所有寻求相同答案的人都有确切的答复。线索是处理请求权限结果。
如果您同时请求 Manifest.permission.ACCESS_BACKGROUND_LOCATION 和 Manifest.permission.ACCESS_FINE_LOCATION,则 android 将根据用户响应使用不同的设置参数在 onRequestPermissionsResult
上呼叫您。在任何情况下 permissions
参数都是相同的:
["android.permission.ACCESS_BACKGROUND_LOCATION", "android.permission.ACCESS_FINE_LOCATION."]
然后,如果用户允许“仅这次”或“使用时...”,您将在 grantResults
参数中收到 ACCESS_FINE_LOCATION 的 0(真)和 [= 的 -1(假) 35=]:
[-1, 0]
但如果用户允许“一直”,您将收到:
[0, 0]
终于被用户“拒绝”了:
[-1, -1]
同样,线索是你知道允许“一直”意味着 ACCESS_BACKGROUND_LOCATION 拨款。
ActivityCompat.requestPermissions(this, [Manifest.permission.ACCESS_BACKGROUND_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION], 100)
...
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (grantResults[0] == PermissionChecker.PERMISSION_DENIED && grantResults[1] == PermissionChecker.PERMISSION_DENIED) {
// user denies
}
if (grantResults[0] == PermissionChecker.PERMISSION_DENIED && grantResults[1] == PermissionChecker.PERMISSION_GRANTED) {
// user allow while using
}
if (grantResults[0] == PermissionChecker.PERMISSION_GRANTED && grantResults[1] == PermissionChecker.PERMISSION_GRANTED) {
// user allow all the time
}
}
这是一个基本问题,但我找不到针对这种情况的解决方案。我使用“Dexter”库来请求运行时权限。我需要获得后台位置权限以便请求权限,然后我在 Android Q 中看到有一个选项“仅在使用应用程序时允许”,但是在使用 dexter 时我无法检测到用户何时选择这个选项。谁能帮我解决这个问题?
您是否尝试过 Dexter 团队解释的那个? (那里有请求 ACCESS_BACKGROUND_LOCATION 权限的示例)
Application stuck when requesting ACCESS_BACKGROUND_LOCATION
并且在 Google 的官方 API 中,他们提到了后台位置检查的新增功能:ACCESS_BACKGROUND_LOCATION
Background location access checklist
此 API 专门为此添加:检查用户在使用应用程序时是否选择允许位置(或意味着,应用程序在前台,而不是后台)
我来晚了。但我对您和所有寻求相同答案的人都有确切的答复。线索是处理请求权限结果。
如果您同时请求 Manifest.permission.ACCESS_BACKGROUND_LOCATION 和 Manifest.permission.ACCESS_FINE_LOCATION,则 android 将根据用户响应使用不同的设置参数在 onRequestPermissionsResult
上呼叫您。在任何情况下 permissions
参数都是相同的:
["android.permission.ACCESS_BACKGROUND_LOCATION", "android.permission.ACCESS_FINE_LOCATION."]
然后,如果用户允许“仅这次”或“使用时...”,您将在 grantResults
参数中收到 ACCESS_FINE_LOCATION 的 0(真)和 [= 的 -1(假) 35=]:
[-1, 0]
但如果用户允许“一直”,您将收到:
[0, 0]
终于被用户“拒绝”了:
[-1, -1]
同样,线索是你知道允许“一直”意味着 ACCESS_BACKGROUND_LOCATION 拨款。
ActivityCompat.requestPermissions(this, [Manifest.permission.ACCESS_BACKGROUND_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION], 100)
...
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (grantResults[0] == PermissionChecker.PERMISSION_DENIED && grantResults[1] == PermissionChecker.PERMISSION_DENIED) {
// user denies
}
if (grantResults[0] == PermissionChecker.PERMISSION_DENIED && grantResults[1] == PermissionChecker.PERMISSION_GRANTED) {
// user allow while using
}
if (grantResults[0] == PermissionChecker.PERMISSION_GRANTED && grantResults[1] == PermissionChecker.PERMISSION_GRANTED) {
// user allow all the time
}
}