Экономия энергии с помощью служб определения местоположения за счет обнаружения движения пользователя с помощью датчиков

Я работаю над приложением, которое отслеживает местонахождение пользователя. Чтобы сэкономить заряд батареи, я хочу реализовать зону ожидания, которая заставляет диспетчер местоположения реже запрашивать (или даже останавливаться) на местоположении GPS. Как только пользователь снова начинает движение (обнаруживается акселерометром и / или значительным движением), служба определения местоположения использует интервал по умолчанию.

Один из подходов - определить зону ожидания как параметр minDistance в LocationManager::requestLocationUpdates, но другие пользователи здесь предполагают, что это не влияет на разряд батареи и документация утверждает, что диспетчеру местоположения сложно сэкономить заряд батареи, используя следующие критерии:

Однако провайдерам геолокации труднее экономить электроэнергию с помощью параметра minDistance, поэтому minTime должен быть основным инструментом для продления срока службы батареи.

Google также предлагает использовать датчик значительного движения для определения того, когда пользователь изменение местоположения:

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

Означает ли это, что диспетчер местоположения использует датчик значительного движения, если он присутствует по умолчанию, или мне нужно активировать или реализовать что-то, чтобы служба определения местоположения использовала его?

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

Можно ли сэкономить заряд батареи, переведя GPS в спящий режим, а затем используя датчики для обнаружения движения пользователя, которое снова разбудит GPS?


person Martin    schedule 16.07.2015    source источник
comment
Привет, Мартин, не нашли ли вы какое-нибудь решение проблемы энергосбережения с обновлением местоположения ...   -  person maddy d    schedule 27.07.2015
comment
Неа. Я не работал над этим после исследования, которое я провел для этого поста. Я разослал несколько писем некоторым людям, но, похоже, сейчас все в отпуске. Я опубликую ответ, когда / если приду к выводу. Спасибо за продолжение!   -  person Martin    schedule 27.07.2015
comment
Я вроде все в отпуске именно по этой теме;);)   -  person maddy d    schedule 27.07.2015
comment
@Martin - Есть новости по этому поводу?   -  person Gurpreet    schedule 16.03.2016
comment
Можно ли по-другому обнаружить движение (и пробудиться ото сна)? У меня есть устройство mediatek, у которого нет значительного датчика движения (согласно датчикам обнаружения apk), но в нем есть встроенная функция, которая включает экран при движении. Как это может быть ?   -  person ransh    schedule 25.01.2017


Ответы (1)


LocationManager::requestLocationUpdates использует significant motion sensor с помощью метода высокого уровня setSmallestDisplacement() Пример:

mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(20*1000);
mLocationRequest.setFastestInterval(10*1000);
mLocationRequest.setSmallestDisplacement(10F); //meters
person Amir    schedule 15.03.2016