google play services location api有时会给出错误的位置

Posted

技术标签:

【中文标题】google play services location api有时会给出错误的位置【英文标题】:google play services location api sometimes give wrong location 【发布时间】:2016-05-07 19:36:51 【问题描述】:

我的应用使用 Google Play 服务 API 来获取用户位置并检查设备是在半径为 50 米的特定区域内还是在外。 该应用程序使用 PRIORITY_HIGH_ACCURACY 和 1 分钟的间隔。 所以我创建了 GoogleApiClient:

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    mGoogleApiClient.connect();

在 onConnected 回调中:

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(60000);
    mLocationRequest.setFastestInterval(10000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

MyLocationListener.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationListener);

我的应用还根据精度(如果精度 > 200 米我丢弃它)和时间(如果它太旧我丢弃它)过滤位置。

该应用程序运行良好,除了在某些特定区域,有时它返回错误的位置更新距真实位置约 500 米,而这些错误的位置总是在同一个地方附近,离手机信号塔只有几步之遥。

在这些区域中,我得到了错误和正确位置的组合,我的应用认为设备有时在感兴趣区域内,有时在感兴趣区域外。

当我收到位置更新时,我会连续等待其他 3 个确认位置。如果与前一个完全相同,我也会过滤位置。这意味着当我收到这些错误时,我会连续收到 4 个错误的位置,每个位置都与其他位置略有不同。

有没有办法防止这种行为?这可能是手机信号塔造成的吗?

【问题讨论】:

【参考方案1】:

总是有可能出错。 200m 的精度并不意味着它在 200m 以内——这意味着你有 67% 的机会在 200m 以内。你仍然有 1/3 的机会不是。

由于大多数 Google Play 位置提供程序都是融合的(使用 GPS 和 wifi/蜂窝数据),是的,非常靠近塔可能会破坏数据。

【讨论】:

因此,由于使用 google place api 无法过滤单元提供程序,因此最好使用旧的位置 api 并仅收听 gps 提供程序(如果不是问题电池)? 您仍然会偶尔出现光点,但它可能更准确。手机信号塔不会影响它。您可以尝试一下,看看它是否表现更好。您还可以尝试过滤现有位置(您已经过滤掉了低准确度的位置。您还可以过滤掉大跳跃,或者至少是下一次更新未确认的大跳跃)。 实际上,当我获得位置更新时,我会连续等待其他 3 个确认位置。如果与前一个完全相同,我也会过滤位置。这意味着当我遇到这些错误时,我会连续出现 4 个错误的位置,每个位置都与其他位置略有不同。 有趣。可能是手机信号塔搞砸了读数,或者谷歌把手机信号塔放错了地方。尝试纯 GPS 至少是一个很好的调试步骤。 我会尝试发布结果。所以获取 GPS 唯一位置的唯一方法是使用旧的 android 位置 api 对吗?使用 google place 服务,您只能获得融合的提供者。【参考方案2】:

setInterval(60000) 更改为setInterval(20000)5000

由于间隔为一分钟,因此即使用户移动,您也不会获得更新。这就是为什么存在不准确的原因。

根据谷歌的说法,setInterval(long) 的意思是 - 设置您想要获取位置的时间间隔。 setFastestInterval(long) 表示 - 如果位置可用,您可以更快地获取它(即另一个应用程序正在使用位置服务。意味着,如果没有其他应用程序正在使用位置服务,您将在一分钟后获得更新)。

【讨论】:

我已经尝试了一些区间组合,但不能解决问题。如果设备仍在我感兴趣的区域中间,它会在真实位置附近获得一些(最多)位置,有时(很少)会在蜂窝塔附近获得位置,即使它几个小时都没有移动。

以上是关于google play services location api有时会给出错误的位置的主要内容,如果未能解决你的问题,请参考以下文章

使用 google-play-services 进行 Proguard

没有要导入的项目 - 对于 google-play-services_lib

为啥 Localytics 需要 google-play-services:ads?

Google Play Services 9.2.1 和 google-services 插件

com.google.android.gms:play-services-maps 的最佳 sdk 版本是啥?

升级到 Google Play 服务:9.0.0 错误无法解决:com.google.android.gms:play-services-measurement:9.0.0