Геолокация, когда устройство бездействует - PullRequest
0 голосов
/ 25 апреля 2018

Моему приложению appcelerator на iOS и Android требуется каждые 5 секунд получать последнюю версию Geolocation и отправлять местоположение обратно на сервер.

Работает хорошо, когда приложение включено и экран включен, однако на обеих платформах, когда экран выключается, объект геолокации не очень часто обновляется - поэтому даже если я получаю геолокацию каждые 5 секунд, это не точный.

Как заставить геолокацию регулярно обновляться при выключенном экране телефона?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Вы действительно хотите получать местоположение каждые 5 секунд, когда устройство выключено?Это очень быстро разряжает батарею.Я думаю, что каждые 5-10 минут будет более подходящим.И, возможно, даже это является чрезмерным.

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

  • ios: set Ti.Geolocation.trackSignificantLocationChange в true;если ваше приложение было убито ОС, оно будет перезапущено при значительных изменениях местоположения;Вы можете обнаружить эту ситуацию, используя launchOptionsLocationKey Ti.App.getArguments ()
  • android: реализовать фоновый сервис (https://docs.appcelerator.com/platform/latest/#!/api/Titanium.Android.Service) для проверки местоположения

Примечание: для андроида мы обнаружили, что ОС будет периодически убивать наш сервис, и хотя она всегда планировала его перезапуск, иногда она планировала это на очень длительное время (например, 8 часов). В итоге мы использовали AlarmService (https://github.com/benbahrenburg/benCoding.AlarmManager) для периодического запуска нашего фонового кода (например, каждые 30 минут), и фоновый код сам отключится примерно через 25 минут.

Кроме того, если вы заботитесь о запуске службы после запускаустройство перезагружено, вам следует подумать об использовании BootReceiver (https://github.com/benbahrenburg/benCoding.Android.Tools/) для перезапуска AlarmService.

Очевидно, что большой упор для Бена Бахренбурга за его превосходные модули!

0 голосов
/ 26 апреля 2018

В версии 7.2.0

ожидается исправление этой проблемы.

https://jira.appcelerator.org/browse/TIMOB-16066

Существует также сторонний модуль, который также решает эту проблему

https://github.com/AppWerft/Ti.LocationUpdatesService

Я еще не попробовал, однако

0 голосов
/ 25 апреля 2018

Вы должны запросить геолокацию на переднем плане Intent Service, в противном случае она не будет работать на Android O с точностью 5 секунд.

Также вы должны использовать WakeLock для предотвращения спящего режима.

...