Мое приложение использует API службы Google Play, чтобы получить местоположение пользователя и проверить, находится ли устройство внутри или за пределами определенной области радиусом 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 неправильных местоположения подряд, каждое из которых немного отличается от других.
Есть ли способ предотвратить такое поведение? Может ли это быть вызвано вышкой сотовой связи?