【问题标题】:Android 10 (Q) ACCESS_BACKGROUND_LOCATION permissionAndroid 10 (Q) ACCESS_BACKGROUND_LOCATION 权限
【发布时间】:2020-03-08 00:12:24
【问题描述】:

我需要用户检查并设置 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();
        }
}

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

【问题讨论】:

标签: java android android-location


【解决方案1】:

对于 Android 10,如果:

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

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

我知道这与您的要求完全相反,但关键是,在这种情况下,“仅在使用应用程序时允许”实际上表现得像“始终允许”,提供了上述前台服务正在运行

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

编辑

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

【讨论】:

  • 无法获得“始终允许”提示... SDK 为 29,在清单中设置权限,仅返回“应用打开时”和“拒绝”选项。这让我发疯了
  • 您是否获得了“始终允许”权限?我也面临这个问题。
  • @SardarKhan 正如这个答案试图解释的那样,你不应该得到“一直允许”提示。
  • @greeble31 我正在通过 accessbackground 位置权限,但仍然不允许所有时间选项。
  • 嗯,我完全认为这个答案是正确的。我的应用程序也是这样设置的,但由于某种原因,当应用程序在屏幕外使用此设置时,应用程序不会处理 BLE ... =X 当应用程序在屏幕上时一切正常,但第二次不是, BLE 停止工作。
【解决方案2】:

我在清单中添加了“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)

【讨论】:

  • 请您发布代码。我也面临同样的问题。
猜你喜欢
  • 1970-01-01
  • 2020-02-09
  • 2016-09-18
  • 2019-12-18
  • 2020-06-16
  • 2019-09-06
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多