尝试获取位置时避免 Google 提示

问题描述 投票:0回答:2

我正在使用 Flutter 的

location
插件开发一个简单的应用程序,其中一些代码基于 他们的示例代码:

var location = new Location();
try {
  _currentLocation = await location.getLocation();
} on PlatformException catch (e) {
  if (e.code == 'PERMISSION_DENIED') {
    _locationMsg = 'Permission denied';
  }
  _currentLocation = null;
}

如插件页面所示,我将

ACCESS_FINE_LOCATION
添加到 Android 清单中。

问题是,当我在手机上测试应用程序时(使用 Android 9,如果相关的话),即使启用了位置并且我有 GPS 信号,执行上述代码也会导致以下提示:

Prompt about enabling Google's location service

提示内容为:“为了获得更好的体验,请打开设备位置,它使用 Google 的位置服务。”,有两个按钮:“不,谢谢”“确定”

这对于用户来说非常不友好:位置已经来自 GPS,无需进一步打扰用户。

问题出在哪里,如何避免这个提示?我更喜欢报告“未知位置”而不是显示提示。

编辑:请注意,该提示与通知用户该位置将被使用无关,但它是一项 Google 隐私侵犯功能,当您单击“确定”时,会启用 Google 位置准确性,如下所述(隐藏在“设置”菜单深处):

Google Location Accuracy description上图写着:“提高位置准确性”,带有切换按钮。 Google 位置准确性:Google 的位置服务通过使用 Wi-Fi 和移动网络来帮助估计您的位置,从而提高位置准确性。当您的设备开启时,匿名位置数据将发送至 Google。

单击第一个提示即可启用此功能,如果用户不想将其位置数据发送给 Google,则必须手动禁用该功能。禁用它并尝试再次获取位置会导致相同的提示,因此它绝对与警告用户有关位置数据的使用情况无关。此外,如果在使用该应用程序之前启用了 Google 位置准确性,则该提示永远不会首先出现,这可能就是大多数开发人员从未注意到它的原因。

我知道可以在不启用 Google 位置准确性的情况下获取位置数据,因为大多数应用程序都会这样做。但不知道提示从何而来:是Flutter的位置插件吗?我使用的是 Android 9 SDK?或者示例代码?

问题似乎来自 location 插件。我尝试将其替换为

geolocator
android flutter location google-location-services
2个回答
5
投票

我在询问位置之前尝试降低精度,但

location
插件仍然显示提示。必须有一些底层代码是硬连线的,以在所有情况下请求 Google 位置准确性。
如果谷歌能提供一种方法来永久禁用提示与系统 
“不”(这一直是多个 Android 版本的问题),我可能会给他们带来怀疑。

我今天遇到了同样的问题,但通过找到有问题的表达式并添加 if 语句来检查是否授予应用程序的位置权限来解决它。

这是我在 Kotlin 中的代码,有问题的表达式位于全部大写的注释下方:


0
投票

现在我的解决方案可能并不完全适用于您的问题,但我认为它应该足以解决您的问题。但是,在请求用户位置时,您可能需要重做代码。

此外,我不太确定是否使用 Flutter 的插件进行定位,但就您和其他人的情况而言,我建议在请求用户位置时遵循开发人员文档。也许它也适用于 Flutter:

https://developer.android.com/training/location/change-location-settings

    

重新启动手机解决了我的问题,因为我猜这是系统方面的问题..

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.