2017-02-14 6 views
0

Я реализовал получение обновлений местоположения с использованием FusedLocationProviderApi. Мне нужно отслеживать местоположение устройства в фоновом режиме, когда приложение не работает.Проблемы с проверкой местоположения. Я не могу заставить их НЕ работать

Я следил за учебниками, у меня есть Служба, где я вызываю requestLocationUpdates с намерением, который запускает сервис.

Я намеренно НЕ реализовал сохранение блокировки слежения только для проверки и увидеть, что при выключении экрана устройство перестает получать обновления местоположения. Как только я проверил, что я мог бы пойти и реализовать блокировку следа и ожидать противоположное, которое должно видеть, что оно работает.

Я использовал два устройства: Google Nexus 10 с KitKat и Samsung Galaxy A5 (2016) с Lollipop.

На обоих устройствах он продолжает отправлять обновления (я отправляю обновления на веб-сайт). Я протестировал экран, после того как оставил устройство на столе в течение минуты, а затем снова пошел по дому.

Я знаю, что Android 6 и режим Doze более ограничительный характер, но я хочу, чтобы гвоздь и понять, как он работает на Android 4.4 и Android 5.

Так расстраивает! Любые идеи о том, как на самом деле заставить устройство перейти в спящий режим, чтобы я мог видеть, что обновление местоположения перестает работать?

Забавно, все, что я читал о том, чтобы она работает :)

EDIT: Я запутался, почему получать обновления местоположения до сих пор работают, когда экран выключен, даже с агрессивной настройкой обновления местоположения, такие как следующее:

locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
locationRequest.setFastestInterval(2); 
locationRequest.setInterval(1000); 
+0

Пока служба работает, вы будете получать обновления местоположения – tyczj

+0

@tyczj спасибо, но как это помогает? Не могли бы вы поделиться своими мыслями? –

+0

Ну, что я получаю, вам нужно, чтобы ваша служба остановилась либо на ОС, останавливающей ее, либо на ручном режиме, останавливая обслуживание, блокировку от бодрствования или не создавая различия. – tyczj

ответ

2

Thing о запросе обновления местоположение в том, что под всем этим, LocationManagerService, что и LocationManager использует, на самом деле создает и приобретает свою собственную wakelock. Так что технически ваше устройство никогда не заснет, пока у вас есть регистратор мест, зарегистрированный для активного приема GPS. Теперь я знаю, что вы используете Google FusedLocationApi, но под всем этим он использует LocationManager. Если вы заинтересованы в понимании кода местоположения немного лучше, вот исходный код для LocationManagerService.

+0

Спасибо. Когда вы говорите «технически, ваше устройство никогда не заснет, пока у вас есть регистратор местоположений, зарегистрированный для активного приема GPS». Не уверен, но не устройство собирается спать и просыпается, чтобы выполнить «намерение», которое я предоставил в 'requestLocationUpdate'? –

+1

Похоже, что он использует AlarmManager, поэтому, если вы установите интервал больше 0, он освобождает wakelock после выключения GPS, чтобы устройство перешло в спящий режим. –

+0

Поскольку он использует wakelocks, это означает, что в режиме Android 6+ режим обновления местоположения не отправляется? Поскольку в режиме Doze блокировки слежения игнорируются. Если приложение не работает в режиме «Дозировка» с белым цветом ... Что такое беспорядок –

Смежные вопросы