如何在用户授予位置权限时检测 "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
    }
}