iOS 4 периодически обновляет местоположение с помощью GPS, когда приложение находится в фоновом режиме - PullRequest
0 голосов
/ 28 декабря 2010

Возможно ли, чтобы телефон включал GPS каждые, скажем, 30 минут и получал местоположение пользователя, когда приложение находится в фоновом режиме?

Служба значительных изменений местоположения слишком неточна для моегопотребности.

Я пытаюсь постоянно отслеживать телефон, не перебивая время работы от батареи.Любые предложения приветствуются!

Ответы [ 3 ]

3 голосов
/ 16 апреля 2013

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

Ответы здесь, к сожалению, охватывают большинство основ, но мой опыт может быть несколько полезным. Использование флага VOIP, позволяющего вашему приложению периодически включаться и выполнять некоторую обработку (например, GPS), работает отлично, НО обзор Apple не допустит этого, если вы на самом деле не используете VOIP. У нас было приложение в AppStore, которое сделало этот трюк. Работало прекрасно - очень низкое потребление жидкого теста, отличное отслеживание GPS. После нескольких обновлений какой-то умный рецензент (возможно, теперь это автоматическая проверка) распознал флаг, но на самом деле мы не использовали voip и отклонил приложение. С тех пор, как мы только что отключили фоновое GPS-слежение - выбор невелик, когда время работы от батареи падает до 90 минут с постоянным горением GPS.

Другой комментарий, связанный с этим, заключался в том, что временная коллекция GPS уходит в фоновом режиме, когда не работает в отладчике - она ​​умирает, потому что активные потоки останавливаются или истекают (если вы купили некоторое время для выполнения некоторых задач), и есть нет способа воскресить любую фоновую активность, основанную на внутреннем таймере. Может работать какое-то периодическое уведомление (я собираюсь попробовать этот подход) или в худшем случае периодическое push-уведомление ... но оно, вероятно, не выигрывает достаточно времени, чтобы получить и сообщить точное местоположение GPS, так что вы будете один раз снова в состоянии оставить GPS работает. Наше приложение имеет режим «принудительного фонового GPS», который предназначен для использования только в том случае, если устройство подключено к сети, поэтому батарея не разряжается, но это лучшее, что мы пока выяснили.

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

Метод периодического пробуждения сработал настолько хорошо, и, безусловно, в интересах пользователя (для экономии заряда батареи), что я был ошеломлен, что Apple не допустила этого для этой цели. Основной недосмотр в поддержке приложений на основе местоположения.

1 голос
/ 12 апреля 2011

У меня очень похожее требование: мое приложение должно делать высокоточные снимки местоположения с периодическим интервалом (обычно 1 минута), и оно должно делать это, даже если устройство находится в спящем режиме или приложение находится в фоновом режиме.

Для достижения этой цели на переднем плане я реализовал систему, которая включает службу определения местоположения, ожидает определения местоположения с требуемой точностью, а затем отключает службу до срабатывания таймера.Этот процесс повторяется и, кажется, работает должным образом: полдюжины неточных показаний местоположения возвращаются (в течение нескольких секунд) до получения точного.

Тестирование показало, что этот подход будет работать, когдааппарат спит, что меня удивило!Так что теперь нам просто нужно позаботиться о том, когда приложение будет фоновым.

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

Установите значение info.plistчтобы указать, что обновления местоположения необходимы приложению, даже если не на переднем плане.Это описано в разделе «Отслеживание местоположения пользователя» документации Apple SDK.Это гарантирует, что обновления местоположения будут доставлены в приложение даже в фоновом режиме или в спящем режиме.

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

К сожалению, если вы отключите сбор данных служб определения местоположения после того, как приложение станет фоновым, оно больше не будет получать уведомления (приложение находится в фоновом режиме, помните?).Поэтому я исследую использование метода setKeepAliveTimeout: handle в UIApplication, чтобы ТАКЖЕ выполнять периодическую проверку, эффективно заменяя мой таймер переднего плана.[Примечание - чтобы зарегистрировать обработчик KeepAlive, вы также должны установить info.plist, чтобы указать, что приложение выполняет VOIP] Когда вызывается обработчик KeepAlive, он включает службы определения местоположения в обработчике, собирает данные, а затем отключает службы определения местоположения.,Тестирование показало, что это перезапускает уведомления служб определения местоположения.Но я вижу, что обработчик KeepAlive вызывается только с 10-минутными интервалами (600 секунд), и я не уверен, достаточно ли это хорошо.

Обратите внимание, что метод setKeepAliveTimeout: handle предназначен для приложений VOIP,и, видимо, Apple очень внимательно изучает приложения, которые его используют.В моем случае это приложение для клиента, который использует Wireless Distribution, а не магазин Apple, поэтому для меня это не проблема.

Однако, если этот подход работает, он, кажется, удовлетворяет неудовлетворенную потребностьс помощью Apple API: уравновешивание необходимости высокоточных данных о местоположении, при этом собирая эти данные только с интервалами, чтобы продлить срок службы батареи.Apple действительно должна поддерживать модель сбора по времени, а не только на основе точности.Ах, хорошо!

Приветствия

1 голос
/ 28 декабря 2010

Apple предоставляет вам только два варианта, которые бывают двух крайностей:

  1. Использование многозадачности GPS (сокращает время автономной работы, поскольку оно постоянно).
  2. Используйте локальные уведомления или push-уведомления, рассчитанные каждые 30 минут (или любой другой интервал), который открывает приложение, когда пользователь нажимает кнопку ОК.
...