так я регистрирую свое приложение для получения обновлений местоположения:
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(Consts.ONE_MINUTE * 10);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setFastestInterval(Consts.ONE_MINUTE);
Builder builder = new GoogleApiClient.Builder(context);
builder.addApi(ActivityRecognition.API);
mGoogleApiClient = builder.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
....
....
@Override
public void onConnected(Bundle connectionHint) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationUpdatespendingInent);
}
мое ожидающее намерение было вызвано в фоновом режиме почти точными запрошенными интервалами...
пока что так хорошо.
проблема: Когда WIFI отключен/не подключен к какой-либо сети или когда нет сетевых данных 3G/4G, - поставщик плавного доступа не предоставляет новые обновления местоположения!
Мои настройки доступа к местоположению включены, а GPS-спутники и WI-FI и местоположение мобильной сети проверены.
еще более серьезная проблема: иногда в этом случае, я получаю обратные вызовы обновлений местоположения через ожидающее намерение, но с последним местоположением, которое он знал (даже если это было час назад, м длиной долго ушел миль от этого места)
в соответствии с документацией PRIORITY_BALANCED_POWER_ACCURACY
:
Используется с setPriority (int) для запроса точности "блока". Точность уровня блока считается равной 100-метровой точности. Использование грубой точности, такой как это, часто потребляет меньше энергии.
Я ожидаю, что провайдер плавного местоположения откроет GPS, если у него нет другого выбора, или, по крайней мере, не предоставит новые обновления местоположения, если у него его нет.
другая непредсказуемая и тревожная проблема:
Я изменил PRIORITY_BALANCED_POWER_ACCURACY
на PRIORITY_HIGH_ACCURACY
, чтобы увидеть, как он себя ведет (в течение 24 часов). все интервалы остались прежними (интервал между обновлениями - 10 минут). точное местоположение действительно получено даже в телефонах без сети/сим-карты, но - аккумулятор разрядился быстро! когда я смотрел историю батареи, я был удивлен, увидев, что радиостанция GPS была в режиме полной передачи все время!!!!, и я видел также в своем журнале, что loction принималась каждую минуту, даже что я запросил местоположение каждые десять минут (у меня нет каких-либо других установленных приложений, которые открывают GPS для получения мест.)
Я заметил это поведение на нескольких устройствах (таких как Moto X 2013, HTC One X, Nexus 5), все с последними сервисами Google Play (версия 6.1.11) и android KITKAT 4.4.4
мое приложение сильно зависит от текущего местоположения пользователя и периодически получает обновления местоположения в указанном интервале до тех пор, пока пользователь вошел в систему, поэтому я не хочу использовать режим PRIORITY_HIGH_ACCURACY
, чтобы предотвратить утечку аккумулятора..
мои вопросы:
-
Предполагается, что провайдер с плавным местоположением вообще использует GPS, если он настроен на получение обновлений с помощью
PRIORITY_BALANCED_POWER_ACCURACY
и не имеет информации о WI-FI или ячейках. -
если это так, то что я делаю неправильно?
-
Почему я ошибаюсь в том, что это неверные данные об ошибках? (как я объяснил в разделе "еще большая проблема".
-
почему GPS-радио все время открыто, а не открыто в течение 10-минутного интервала, когда я использовал параметр
PRIORITY_HIGH_ACCURACY
? (У меня нет других установленных приложений, которые быстрее ускоряют обновление местоположения.)