Android10(Q)ACCESS_BACKGROUND_LOCATION权限

Android 10 (Q) ACCESS_BACKGROUND_LOCATION permission

我需要用户检查并设置 ACCESS_BACKGROUND_LOCATION ("Allow all the time") 的权限,而没有 "Allow only while using the app" 的选项。我的 GPS 跟踪应用程序需要继续访问位置,即使应用程序已最小化。

我已经拥有为 ACCESS_FINE_LOCATION 工作的权限 Android 9.

AndroidManifest.xml--------------------------------------------------->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
TrackingActivity.java (need to include ACCESS_BACKGROUND_LOCATION)---->

private void permissionCheck1() {
        int permissionCheck1 = ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION);
        if (permissionCheck1 != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
        } else {
            grantedSetupGPSandMap();
        }
}

如果可能的话,我需要唯一的权限选项是 "Allow all the time"。检查和设置权限时如何设置?

对于 Android 10,如果:

  • 您省略了 ACCESS_BACKGROUND_LOCATION,并且:
  • 您使用在清单中设置 android:foregroundServiceType="location" 属性 的前台服务,然后:

系统将仅向用户提供 "Allow only while using the app" 和 "Deny" 选项,参考位置权限。

我知道这与您的要求完全相反,但重点是,在这种情况下,"Allow only while using the app" 的行为实际上与 "Allow all the time" 相同, 提供了上述前台服务是 运行.

即使应用程序不在屏幕上,您也可以接收位置更新。并且用户没有仅部分允许位置更新的选项;他们必须在完全允许或完全拒绝之间做出选择。

编辑

此答案还假设您的 targetSdkVersion 是 29。

我在清单中添加了“ACCESS_BACKGROUND_LOCATION”权限,但我在 Android 10 设备中遇到了同样的问题。 “始终允许”选项未显示在对话框中。

然后我在permissions array中添加了“ACCESS_BACKGROUND_LOCATION”权限,要求用户在运行时授予。现在显示所有三个选项。

ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION), MY_PERMISSIONS_REQUEST_LOCATION)