我正在使用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信号,则执行上述代码将出现以下提示:

提示符上写着:“为了获得更好的体验,打开设备定位,它使用谷歌的定位服务。”
,有两个按钮:“不用了,谢谢”和"OK“..。
这对用户非常不友好:位置已经来自GPS,没有必要进一步打扰用户。
问题是从哪里来的,我如何避免这个提示?我更喜欢报告“未知位置”而不是显示提示。
编辑:请注意,提示符是
注释
与通知用户将使用该位置相关,但这是一个谷歌隐私侵犯功能,当您单击确定时,将启用谷歌位置准确性,如下所述(隐藏在设置菜单的深层):

上图显示:“提高定位精度”,带有切换按钮。谷歌定位精度:谷歌的定位服务通过使用Wi-Fi和移动网络来帮助估计你的位置,从而提高了定位精度。当您的设备打开时,匿名位置数据将被发送到Google。
单击第一个提示将启用此功能,如果用户不想将其位置数据发送到Google,则必须手动禁用此功能。禁用它并再次尝试获取位置将导致相同的提示,因此这肯定与警告用户位置数据的使用无关。此外,如果启用了Google定位精度
之前
使用该应用程序时,提示符从一开始就不会出现,这可能就是为什么大多数开发人员都不会注意到它的原因。
我知道获取位置数据是可能的
没有
启用谷歌定位精度,因为大多数应用程序都是这样做的。但我不知道提示符是从哪里来的:它是Flutter的位置插件吗?我使用的是Android 9 SDK吗?还是示例代码?
发布于 2019-06-09 16:45:17
这个问题似乎来自于location插件。我试着用geolocator,并修改调用者代码,这次不会出现这样的提示。
我试着在询问位置之前降低精确度,但是location插件仍然会显示提示。必须有一些底层代码,这是硬连线,以要求谷歌定位精度在所有情况下。
如果谷歌能提供一种方法,用系统的"no“永久禁用提示符(这已经是几个Android版本的问题),我可能会给他们怀疑的好处。
发布于 2021-02-19 06:09:26
我今天也遇到了同样的问题,但我找到了有问题的表达式,并添加了一个if语句来检查应用程序的位置权限是否被授予,从而解决了这个问题。
这是我用Kotlin编写的代码,令人不快的表达式位于注释下,全部大写:
private fun checkLocationPermission() : Boolean = (ContextCompat.checkSelfPermission(
requireContext(), ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
private fun startLocationRequests() {
val locationRequest = LocationRequest.create()?.apply {
interval = 10000
fastestInterval = 5000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest!!)
val client: SettingsClient = LocationServices.getSettingsClient(requireActivity())
val task: Task = client.checkLocationSettings(builder.build())
task.addOnSuccessListener { locationSettingsResponse ->
// All location settings are satisfied. The client can initialize
// location requests here.
// ...
if (checkLocationPermission()) {
locationPermissionGranted = true
fusedLocationProviderClient.requestLocationUpdates(
locationRequest, locationCallback, Looper.getMainLooper())
}
}
task.addOnFailureListener { exception ->
if (exception is ResolvableApiException){
// Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
// IF STATEMENT THAT PREVENTS THE DIALOG FROM PROMPTING.
if (checkLocationPermission()) {
exception.startResolutionForResult(
requireActivity(),
REQUEST_CHECK_SETTINGS
)
}
} catch (sendEx: IntentSender.SendIntentException) {
// Ignore the error.
}
}
Timber.i("Location Listener failed")
}
}现在,我的解决方案可能不完全适用于你的问题,但我认为它应该足够学习来解决你的问题。但是,在请求用户位置时,您可能需要重做代码。
此外,我不太确定是否使用Flutter的插件来定位,但在您和其他人的情况下,当涉及到请求用户的位置时,我建议遵循开发人员文档。也许它也适用于Flutter:
https://developer.android.com/training/location/change-location-settings
https://stackoverflow.com/questions/56510590
复制相似问题