0

我的应用程序使用 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 mt 我丢弃它)和时间(如果它太旧我丢弃它)过滤位置。

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

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

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

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

4

2 回答 2

1

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

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

于 2016-01-29T22:31:43.717 回答
0

更改setInterval(60000)setInterval(20000)5000

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

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

于 2016-01-29T22:32:20.363 回答