вот как я регистрирую свое приложение для получения обновлений местоположения:
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-радио все время было в режиме полной передачи !!!! и я также увидел в своем журнале, что сигнал принимался каждую минуту, даже что я запрашивал местоположение каждые десять минут (у меня нет других установленных приложений, которые открывают 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
? (У меня нет других установленных приложений, которые ускоряют обновление местоположения ..)