Android 10(Q)ACCESS_BACKGROUND_LOCATION权限

时间:2019-11-12 09:52:35

标签: java android android-location

我需要用户检查并设置对ACCESS_BACKGROUND_LOCATION的许可(“一直允许”),而不能选择“仅在使用该应用程序时允许”。即使最小化了我的GPS跟踪应用程序,也需要继续访问位置。

我已经具有使用Android 9的ACCESS_FINE_LOCATION的权限。

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();
        }
}

如果可能的话,我需要唯一的权限选项是“一直允许”。在检查和设置权限时如何设置?

2 个答案:

答案 0 :(得分:2)

对于Android 10,如果:

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

参考位置许可,系统将仅向用户提供“仅在使用应用程序时允许”和“拒绝”选项。

我意识到这与您要求的完全相反,但是要点是,在这种情况下,“仅在使用应用程序时允许”的行为实际上就像“一直允许”,提供了上述前台服务正在运行

即使该应用不在屏幕上,您也将能够接收位置更新。并且用户不能选择仅部分允许位置更新;他们必须在完全允许还是完全拒绝之间做出选择。

编辑

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

答案 1 :(得分:0)

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

enter image description here

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

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

enter image description here