首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在尝试获取位置时避免Google提示

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

Stack Overflow用户
提问于 2019-06-09 06:31:46
回答 2查看 3.4K关注 0票数 6

我正在使用Flutter开发一个简单的应用程序 location插件,带有一些基于以下内容的代码

他们的示例代码

代码语言:javascript
复制
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吗?还是示例代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-09 16:45:17

这个问题似乎来自于location插件。我试着用geolocator,并修改调用者代码,这次不会出现这样的提示。

我试着在询问位置之前降低精确度,但是location插件仍然会显示提示。必须有一些底层代码,这是硬连线,以要求谷歌定位精度在所有情况下。

如果谷歌能提供一种方法,用系统的"no“永久禁用提示符(这已经是几个Android版本的问题),我可能会给他们怀疑的好处。

票数 3
EN

Stack Overflow用户

发布于 2021-02-19 06:09:26

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

这是我用Kotlin编写的代码,令人不快的表达式位于注释下,全部大写:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56510590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档