我正在使用 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 信号,执行上述代码也会导致以下提示:
提示内容为:“为了获得更好的体验,请打开设备位置,它使用 Google 的位置服务。”,有两个按钮:“不,谢谢” 和 “确定”。
这对于用户来说非常不友好:位置已经来自 GPS,无需进一步打扰用户。问题出在哪里,如何避免这个提示?我更喜欢报告“未知位置”而不是显示提示。
编辑:请注意,该提示与通知用户该位置将被使用无关,但它是一项 Google 隐私侵犯功能,当您单击“确定”时,会启用 Google 位置准确性,如下所述(隐藏在“设置”菜单深处):
上图写着:“提高位置准确性”,带有切换按钮。 Google 位置准确性:Google 的位置服务通过使用 Wi-Fi 和移动网络来帮助估计您的位置,从而提高位置准确性。当您的设备开启时,匿名位置数据将发送至 Google。
单击第一个提示即可启用此功能,如果用户不想将其位置数据发送给 Google,则必须手动禁用该功能。禁用它并尝试再次获取位置会导致相同的提示,因此它绝对与警告用户有关位置数据的使用情况无关。此外,如果在使用该应用程序之前启用了 Google 位置准确性,则该提示永远不会首先出现,这可能就是大多数开发人员从未注意到它的原因。
我知道可以在不启用 Google 位置准确性的情况下获取位置数据,因为大多数应用程序都会这样做。但不知道提示从何而来:是Flutter的位置插件吗?我使用的是 Android 9 SDK?或者示例代码?
问题似乎来自 location
插件。我尝试将其替换为
geolocator
我在询问位置之前尝试降低精度,但
location
插件仍然显示提示。必须有一些底层代码是硬连线的,以在所有情况下请求 Google 位置准确性。如果谷歌能提供一种方法来永久禁用提示与系统 “不”(这一直是多个 Android 版本的问题),我可能会给他们带来怀疑。
我今天遇到了同样的问题,但通过找到有问题的表达式并添加 if 语句来检查是否授予应用程序的位置权限来解决它。
这是我在 Kotlin 中的代码,有问题的表达式位于全部大写的注释下方: