我的应用程序使用 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 个错误的位置,每个位置都与其他位置略有不同。
有没有办法防止这种行为?这可能是由手机信号塔引起的吗?