Android 10 (Q) ACCESS_BACKGROUND_LOCATION 权限

Chr*_*ing 7 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" />
Run Code Online (Sandbox Code Playgroud)
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();
        }
}
Run Code Online (Sandbox Code Playgroud)

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

gre*_*e31 18

对于 Android 10,如果:

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

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

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

即使应用程序在屏幕外,您也能收到位置更新。并且用户不能选择只允许部分位置更新;他们必须在完全允许或完全拒绝之间做出选择。

编辑

这个答案还假设你targetSdkVersion是 29。

  • 无法获得“始终允许”提示... SDK 为 29,权限在清单中设置,仅返回“当应用程序打开时”和“拒绝”选项。这真让我抓狂 (2认同)